簡體   English   中英

從文件中刪除未混合的數字

[英]Remove unmixed numbers from file

假設我有一個名為input.txt的文件,看起來像這樣

I listened to 4 u2 albums today
meet me at 5
squad 4ever

我想過濾掉自己的數字,所以“4”和“5”應該去,但“u2”和“4ever”應保持不變。 即輸出應該是

I listened to u2 albums today
meet me at
squad 4ever

我一直在嘗試使用這段代碼

for line in fileinput.input("input.txt", inplace=True):
    new_s = ""
    for word in line.split(' '):
        if not all(char.isdigit() for char in word):
            new_s += word
            new_s += ' '
    print(new_s, end='')

這與我在這里找到的代碼非常相似: 刪除與字母串中的字母混合的數字

但我得到的不是想要的輸出

I listened to u2 albums today
 meet me at 5
 squad 4ever 

正如你所看到的,這里有兩個問題,首先只有第一行丟失我希望它丟失的數字,第二行仍然存在“5”。 第二個問題是新行開頭的額外空白區域。

我已經玩了一段時間的代碼和瀏覽stackoverflow,但無法找到問題的來源。 任何見解?

str.split(' ')不會刪除每行的尾隨換行符。 他們最終依附於該行的最后一個字。 因此,對於您的第一個問題, '5'不會被刪除,因為它實際上是'5\\n' ,並且\\n不是數字。

第二個問題是相關的。 當您打印每行的最后一個單詞時,它包含該換行符,並且您在末尾添加了一個空格。 該空間顯示為下一行的第一個字符。

最簡單的解決方案就是將line.split(' ')更改為line.split() 沒有任何參數, split()將刪除所有空格,包括換行符。 您還需要從print刪除end='' ,以便重新添加換行符。

只需使用正則表達式。

re.sub(r"\b\d+\b", "", input)

匹配單詞邊界之間的任何數字

或者避免雙重空格:

re.sub(r"\s\d+\s", " ", input)

你可以使用正則表達式:

data = open('file.txt').read()
import re
data = re.sub('(?<=\s)\d+(?=$)|(?<=^)\d+(?<=\s)|(\s\d+\s)', '', data)

輸出:

I listened tou2 albums today
meet me at
squad 4ever

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM