Python从文件中提取数据

时间:2012-09-24 08:05:53

标签: python python-2.7

我有一个文本文件只是说

text1 text2 text text
text text text text

我期待首先计算文件中的字符串数(全部由空格分隔),然后输出前两个文本。 (文本1文本2)

有什么想法吗?

提前感谢您的帮助

编辑:这是我到目前为止所做的:

>>> f=open('test.txt')
>>> for line in f:
    print line
text1 text2 text text text text hello
>>> words=line.split()
>>> words
['\xef\xbb\xbftext1', 'text2', 'text', 'text', 'text', 'text', 'hello']
>>> len(words)
7
if len(words) > 2:
    print "there are more than 2 words"

我遇到的第一个问题是,我的文本文件是:text1 text2 text text text

但是当我拉出单词的输出时,我得到: ['\ xef \ xbb \ xbftext1','text2','text','text','text','text','hello']

'\ xef \ xbb \ xbf来自哪里?

1 个答案:

答案 0 :(得分:16)

要逐行读取文件,只需在for循环中循环打开文件对象:

for line in open(filename):
    # do something with line

要按空格将一行划分为单独的单词列表,请使用str.split()

words = line.split()

要计算python列表中的项目数,请使用len(yourlist)

count = len(words)

要从python列表中选择前两项,请使用切片:

firsttwo = words[:2]

我会给你构建完整的程序,但你不需要比上面更多的内容,加上一个if语句来判断你是否已经有了这两个词。

您在文件开头看到的三个额外字节是UTF-8 BOM(字节顺序标记);它将您的文件标记为UTF-8编码,但它是多余的,仅在Windows上使用。

您可以使用以下命令将其删除:

import codecs
if line.startswith(codecs.BOM_UTF8):
    line = line[3:]

您可能希望使用该编码将字符串解码为unicode:

line = line.decode('utf-8')

您也可以使用codecs.open()打开文件:

file = codecs.open(filename, encoding='utf-8')

请注意,codecs.open()为您剥离BOM;最简单的方法是使用.lstrip()

import codecs
BOM = codecs.BOM_UTF8.decode('utf8')
with codecs.open(filename, encoding='utf-8') as f:
    for line in f:
        line = line.lstrip(BOM)