【发布时间】:2023-03-16 02:51:01
【问题描述】:
我有一个 file.txt,我只想保留所有没有空格的字母和数字字符并将其保存在列表中,还有其他方法吗? 这是新代码,速度更快。你怎么看?
fin = open(fcompiti, encoding = 'UTF-8')
s = fin.read()
s = s.replace(' ', '').replace('\n','')
【问题讨论】:
标签: python-3.x
我有一个 file.txt,我只想保留所有没有空格的字母和数字字符并将其保存在列表中,还有其他方法吗? 这是新代码,速度更快。你怎么看?
fin = open(fcompiti, encoding = 'UTF-8')
s = fin.read()
s = s.replace(' ', '').replace('\n','')
【问题讨论】:
标签: python-3.x
Regex (regular expressions) 是你的朋友。
fin = open('file.txt')
s = fin.read()
alphanums = re.sub(r'[\W_]+', '', s)
This 的回答将为您提供更多关于其工作原理和原因的知识和示例。
【讨论】:
您可以尝试使用正则表达式,它可能会或可能不会比您的方法更快(取决于文本的大小和结构)。
import re
with open('file.txt') as f:
s = f.read()
s = ''.join(re.findall(r'[\dA-z]+', s))
附带说明,您的代码没有达到应有的内存效率。您可以使用生成器,而不是在内存中创建一个列表然后将其传递给join。
s = ''.join(c for c in s if c.isalpha() or c.isnumeric())
# note absence of square brackets
【讨论】:
我觉得会有点快:
import re, string
pattern = re.compile('[\W_]+')
with open('file.txt') as f:
rdstr = f.read()
rdstr = pattern.sub('', rdstr)
print(rdstr)
对于这个txt文件:
abc342][][]asde34=)$(s)
它会返回
abc342asde34s
你可以在这里https://repl.it/Ni04/0观看直播
【讨论】:
除了使用 RegEx,您还可以使用 .isalnum() 内置函数而不是检查 .isalpha() 和 .isnumeric()
with open('file.txt') as fin:
s = fin.read()
s = ''.join(c for c in s if c.isalnum())
编辑:正如另一位用户提到的,您可以在加入之前删除在文件中创建字符列表的部分。 [,] 括号内的 .join() 不是必需的。
【讨论】: