我有一个file.txt,我只想保留所有没有空格的字母和数字字符并将其保存在列表中,还有其他方法吗? 这是新代码,速度更快。你觉得怎么样?
fin = open(fcompiti, encoding = 'UTF-8')
s = fin.read()
s = s.replace(' ', '').replace('\n','')
答案 0 :(得分:1)
我认为这会有点快:
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
答案 1 :(得分:1)
您可以尝试使用正则表达式,这可能会比您的方法更快(取决于文本的大小和结构)。
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
答案 2 :(得分:1)
Regex (regular expressions)是你的朋友。
fin = open('file.txt')
s = fin.read()
alphanums = re.sub(r'[\W_]+', '', s)
This回答会为您提供更多有关其工作原理和原因的知识和示例。
答案 3 :(得分: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()
括号不是必需的。