从文件中删除未混合的数字
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='')
这与我在此处找到的代码非常相似:Removing numbers mixed with letters from string
但我得到的不是想要的输出
I listened to u2 albums today
meet me at 5
squad 4ever
如您所见,这里有两个问题,首先只有第一行丢失了我希望它丢失的数字,第二行仍然存在“5”。第二个问题是新行开头的额外白色space。
我一直在研究代码并浏览了Whosebug,但找不到问题出在哪里。有什么见解吗?
只需使用正则表达式。
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
str.split(' ')
不会从每行中删除尾随的换行符。他们最终附加到该行的最后一个字。因此,对于您的第一个问题,'5'
不会被删除,因为它实际上是 '5\n'
,而 \n
不是数字。
第二个问题相关。当您打印每行的最后一个单词时,它包含该换行符,并且您要在末尾添加一个 space 。 space 显示为下一行的第一个字符。
最简单的解决方案就是将 line.split(' ')
更改为 line.split()
。没有任何参数,split()
将删除所有白色 space,包括换行符。您还需要从 print
中删除 end=''
,以便重新添加换行符。
假设我有一个名为 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”。第二个问题是新行开头的额外白色space。
我一直在研究代码并浏览了Whosebug,但找不到问题出在哪里。有什么见解吗?
只需使用正则表达式。
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
str.split(' ')
不会从每行中删除尾随的换行符。他们最终附加到该行的最后一个字。因此,对于您的第一个问题,'5'
不会被删除,因为它实际上是 '5\n'
,而 \n
不是数字。
第二个问题相关。当您打印每行的最后一个单词时,它包含该换行符,并且您要在末尾添加一个 space 。 space 显示为下一行的第一个字符。
最简单的解决方案就是将 line.split(' ')
更改为 line.split()
。没有任何参数,split()
将删除所有白色 space,包括换行符。您还需要从 print
中删除 end=''
,以便重新添加换行符。