我有一个包含随机字母,数字和字符的文本文件。我必须删除特殊字符,最后只打印字母数字字符,同时打印过程。
文本文件是这样的:
fkdjks97#!%&jd
28e8uw99...
等等
出于某种原因打印:
Line read' ,,s.8,ymsw5w-86
'
' ,,s.8,ymsw5w-86
'->' <filter object at 0x0000020406BC8550> '
这些应该只有2行而不是4行。像这样:
读行&#39; ,, S.8,ymsw5w-86&#39;
&#39; ,, S.8,ymsw5w-86&#39; - &GT; &#39; s8ymsw5w86&#39;
我的尝试:
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
答案 0 :(得分:3)
filter()
是一个迭代器对象;你需要实际迭代它以取出结果。
在这种情况下,您需要返回一个字符串,因此您可以使用str.join()
进行迭代并将所有内容放回一个字符串中:
line2 = ''.join(filter(str.isalnum, line))
请注意,您不应该在while True
次呼叫时使用file1.readline()
循环。您可以直接在文件上使用for
循环来获取行,方法是将while True
,line = file1.readline()
和if len(line) == 0: break
行替换为:
for line in file1:
# ...
答案 1 :(得分:0)
您可能正在寻找正则表达式解决方案:
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)