Python过滤非字母数字不能正常工作

2024-09-28 22:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个随机字母,数字和字符的文本文件。在打印过程中,我必须删除特殊字符,最后只能使用字母数字字符。你知道吗

文本文件如下:

fkdjks97#!%&jd
28e8uw99...

等等

出于某种原因,它正在打印:

Line read' ,,s.8,ymsw5w-86    
 '
' ,,s.8,ymsw5w-86
 '->' <filter object at 0x0000020406BC8550> '

这些应该只在2行,而不是4行。像这样:

行读',s.8,ymsw5w-86'

',,s.8,ymsw5w-86'->;'s8ymsw5w86'

我的尝试:

file1 = open(textfile1,"r")

while True:
    line = file1.readline()
    line2 = filter(str.isalnum,line)
    print("Line read'", str(line), "'")
    print("'", str(line), "'->'", line2, "'")

    if len(line) == 0:
        break

Tags: read过程字母line数字filter字符file1
2条回答

filter()是一个迭代器对象;您实际上需要对它进行迭代才能得到结果。你知道吗

在本例中,您希望返回一个字符串,因此可以使用str.join()进行迭代,并将所有内容放回单个字符串中:

line2 = ''.join(filter(str.isalnum, line))

请注意,实际上不需要对file1.readline()调用使用while True循环。通过将while Trueline = file1.readline()if len(line) == 0: break行替换为:

for line in file1:
    # ...

您可能正在寻找正则表达式解决方案:

import re
rx = re.compile(r'[^A-Za-z]+')

# some sample line
line = 'fkdjks97#!%&jd'

# and then later on
line = rx.sub('', line)
print(line)

这就产生了

# fkdjksjd


将其放入with...构造中,您可能使用
with open(textfile1, "r") as fp:
    line = rx.sub('', fp.readline())
    print(line)

相关问题 更多 >