尝试只读取包含文件中字母内容的单词并插入列表。
def readWords(x,y):
with open(x,'r') as f:
for line in f:
for word in line.split():
y.append(word)
firstFile = sys.argv[1]
firstList = []
readWords(firstFile, firstList)
示例文件:
car */ /*one lemon grass
food accelerate
如何修改此内容以读取除特殊字符(仅字母内容,无标点符号或数字)之外的每个单词?即最终结果是:
[car, one, lemon, grass, food, accelerate]
答案 0 :(得分:2)
过滤空间和特殊字符的最简单解决方案:
filter(None,re.split(r'\W|\d', bleh))
正则表达式
正则表达式'\ W'基本上意味着'捕获'任何非单词字符,而\ d表示你想要捕获数字字符。所以如果你有一个词:
banana“*#12312 Sugar
它会捕获完整的非单词字符:
“*#12312
正则表达式功能拆分
此代码:
re.split(r'\W|\d', bleh)
类似于你使用的split,除了它很酷,因为它是正则表达式驱动的,这给你一些惊人的功能。
过滤功能
从字面上过滤掉你不想要的东西。所以,在这段代码中,foo是一个列表,其中foo = [“A”,“B”,“”,“D”]:
filter(None,foo)
它基本上在列表中查找并找到'None'的实例,然后从列表中弹出/删除它。
完整代码:
import re
bleh = """"car */12314 34234 /*one 123123lemon grass
food accelerate
"""
print filter(None,re.split(r'\W|\d', bleh))
结果:
['car', 'one', 'lemon', 'grass', 'food', 'accelerate']
使用您的代码
import re
def readWords(x,y):
with open(x,'r') as f:
for line in f:
//Append to y
y += filter(None,re.split(r'\W|\d', line))
firstFile = sys.argv[1]
firstList = []
readWords(firstFile, firstList)