Python 从文件中删除未混合的数字

Python 从文件中删除未混合的数字,python,python-3.x,python-3.5,Python,Python 3.x,Python 3.5,假设我有一个名为input.txt的文件,看起来像这样 I listened to 4 u2 albums today meet me at 5 squad 4ever 我想过滤掉独立的数字,所以“4”和“5”应该去掉,但“u2”和“4ever”应该保持不变。i、 e输出应为 I listened to u2 albums today meet me at squad 4ever 我一直在尝试使用这个代码 for line in fileinput.input("input.txt", in

假设我有一个名为input.txt的文件,看起来像这样

I listened to 4 u2 albums today
meet me at 5
squad 4ever
我想过滤掉独立的数字,所以“4”和“5”应该去掉,但“u2”和“4ever”应该保持不变。i、 e输出应为

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,但找不到问题的根源。有什么见解吗

只需使用regexp

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)
str.split(“”)
不会从每行中删除尾随的换行符。他们最终都会依附于这行的最后一个字。因此,对于第一个问题,
'5'
不会被删除,因为它实际上是
'5\n'
,而且
\n
不是数字

第二个问题是相关的。当您打印每行的最后一个字时,它包含该换行符,并且您在末尾添加了一个空格。该空格显示为下一行的第一个字符


最简单的解决方案是将
line.split(“”)
更改为
line.split()
。如果没有任何参数,
split()
将删除所有空白,包括换行符。您还需要从
打印中删除
end='
,以便添加换行符。

这种方法很有效,但在替换数字时会留下一个空格,而不是空白,这会将“我今天听了4张u2专辑”变成“我今天听了u2专辑”,在“到”和“u2”之间有2个空格。有没有办法解决这个问题?用解决方案编辑问题的方法是,行的最后一个字以
\n
结尾。这不是一个数字,因此它传递if语句,额外的空间是因为每次在for循环中都添加了一个空间,包括行上的最后一个字。在每行末尾(新行之前)还添加了一个额外的空间,可能需要使用
print(new_s[:-1])来处理
@yinnonsanders或将每行的单词存储在列表中,然后执行
'.join()
I listened tou2 albums today
meet me at
squad 4ever