忽略文件读取中的特殊字符

时间:2016-04-08 22:50:35

标签: python

尝试只读取包含文件中字母内容的单词并插入列表。

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]

1 个答案:

答案 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)