用Python读取文件不会读取第一行

时间:2015-10-30 17:51:38

标签: python list

我正在读取一个文本文件,用逗号分隔单词和数字,然后将它们添加到单独的列表中,但是第一个名称被省略。这是我的代码。

for line in keywordFile:
     line = keywordFile.readline()
     keyword.append(line[0])
     keywordValue.append(line[1])

3 个答案:

答案 0 :(得分:3)

您正在使用第一个readline(),并使用line语句中定义的for

答案 1 :(得分:2)

似乎你keywordFile是一个文件对象,因为文件对象是迭代器(一次迭代),在你循环它的第一行之后就消耗了第一行。

for line in keywordFile:
          ^

然后你使用readline来阅读下一行,这是额外的,所以为了解决这个问题,你需要删除这部分。

另外,作为一种更加pythonic的方式,您可以使用列表推导来通过用逗号分隔行来创建单词列表。如果要创建所有单词的列表,可以使用嵌套循环:

with open ('filename') as keywordFile :
    words = [w for line in keywordFile for w in line.split(',')]

但是如果你想把每一行的分隔词放在一个单独的列表中,你只需要使用一个循环:

with open ('filename') as keywordFile :
    words = [line.split(',') for line in keywordFile]

或者作为更好的选择使用csv模块将文件作为单独的单词打开。您可以将分隔符参数传递给csv.reader函数:

import csv

with open('file_name') as f:
  words=csv.reader(f,delimiter=',')  

这里words是来自分离单词元组的迭代器。而且你想要连接它们,你可以起诉itertools.chain.from_iterable()函数。

答案 2 :(得分:1)

尝试类似:

for line in keywordFile:
     tokens = line.split(',')
     keyword.append(tokens[0])
     keywordValue.append(tokens[1])