如何浏览PYTHON中的文件?

时间:2016-09-27 14:00:16

标签: python python-2.7 text punctuation

我有一个文件.txt,我想浏览一下它的文字。我有一个问题,我需要在浏览单词之前删除标点符号。我试过这个,但它并没有删除标点符号。

file=open(file_name,"r")
for word in file.read().strip(",;.:- '").split():
     print word
file.close()

5 个答案:

答案 0 :(得分:1)

您当前的方法存在的问题是.strip()并没有真正做到您想要的。它删除了前导和尾随字符(并且你想删除文本中的字符),如果你想指定除空格之外的字符,它们需要在列表中。

另一个问题是,有更多潜在的标点字符(问号,感叹号,unicode省略号,em破折号)不会被列表过滤掉。相反,您可以使用string.punctuation来获取各种字符(请注意string.punctuation不包含一些非英文字符,因此其可行性可能取决于您的输入来源):

import string
punctuation = set(string.punctuation)
text = ''.join(char for char in text if char not in punctuation)

更快的方法(在other answers上显示在SO上)使用string.translate()来替换字符:

import string
text = text.translate(string.maketrans('', ''), string.punctuation)

答案 1 :(得分:1)

strip()仅删除在字符串开头或结尾找到的字符。 所以split()首先要切换成单词,然后strip()删除标点符号。

import string

with open(file_name, "rt") as finput:
    for line in finput:
        for word in line.split():
            print word.strip(string.punctuation)

或使用自然语言感知库,例如nltkhttp://www.nltk.org/

答案 2 :(得分:0)

您可以尝试使用re模块:

import re
with open(file_name) as f:
    for word in re.split('\W+', f.read()):
        print word

有关详细信息,请参阅re documentation

编辑:如果是非ASCII字符,前面的代码会忽略它们。在这种情况下,以下代码可以提供帮助:

import re
with open(file_name) as f:
    for word in re.compile('\W+', re.unicode).split(f.read().decode('utf8')):
        print word

答案 3 :(得分:0)

以下代码保留了撇号和空白,如果需要,可以轻松修改以保留双引号。它的工作原理是使用基于字符串对象的子类的转换表。我认为代码很容易理解。如果有必要,可以提高效率。

class SpecialTable(str):
    def __getitem__(self, chr):
        if chr==32 or chr==39 or 48<=chr<=57 \
            or 65<=chr<=90 or 97<=chr<=122:
            return chr
        else:
            return None

specialTable = SpecialTable()


with open('temp2.txt') as inputText:
    for line in inputText:
        print (line)
        convertedLine=line.translate(specialTable)
        print (convertedLine)
        print (convertedLine.split(' '))

这是典型的输出。

This! is _a_ single (i.e. 1) English sentence that won't cause any trouble, right?

This is a single ie 1 English sentence that won't cause any trouble right
['This', 'is', 'a', 'single', 'ie', '1', 'English', 'sentence', 'that', "won't", 'cause', 'any', 'trouble', 'right']
'nother one.

'nother one
["'nother", 'one']

答案 4 :(得分:-1)

在将单词存储在列表中后,我会删除带有replace函数的标点符号:

with open(file_name,"r") as f_r:
    words = []
    for row in f_r:
        words.append(row.split())
punctuation = [',', ';', '.', ':', '-']
words = [x.replace(y, '') for y in punctuation for x in words]