保留python中的所有字母和数字字符

时间:2017-11-03 17:30:08

标签: python-3.x

我有一个file.txt,我只想保留所有没有空格的字母和数字字符并将其保存在列表中,还有其他方法吗? 这是新代码,速度更快。你觉得怎么样?

fin = open(fcompiti, encoding = 'UTF-8')
s = fin.read()
s = s.replace(' ', '').replace('\n','')

4 个答案:

答案 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()括号不是必需的。