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

标签 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 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='')

这与我在此处找到的代码非常相似:Removing numbers mixed with letters from string

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

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='',以便重新添加换行符。

关于python - 从文件中删除未混合的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310379/

相关文章:

python - Pandas:按数百个分组 DataFrame

python - 如何将函数参数限制为固定大小的数组?

python - len(array) 在解释器中工作,在函数内调用时失败

python - 以Pythonic方式比较列表项

python - 如何测试将数据发送到接收器的 Faust 代理?

python - 在 pyspark 中同时运行而不是顺序运行 for 循环

python - 在 Python 3 中将字符串转换为 int 或 float?

python - 如何根据条件(大于或小于)打印出文本文件中的特定行/行

python - 在python中将包名和函数名作为变量传递

python - 运行使用 cx_freeze 制作的 tkinter exe 时出错