如何在Python中将文本文件转换为列表

如何在Python中将文本文件转换为列表,python,list,Python,List,我在尝试将文本文件转换为按逗号拆分的列表时遇到问题。基本上,我想要: DATE OF OCCURRENCE,WARD,LONGITUDE,LATITUDE 06/04/2011,3,-87.61619704286184,41.82254380664193 06/04/2011,20,-87.62391924557963,41.79367531770095 看起来像: [["DATE OF OCCURRENCE", "WARD", "LONGITUDE" , "LATITUDE"], ["

我在尝试将文本文件转换为按逗号拆分的列表时遇到问题。基本上,我想要:

DATE  OF OCCURRENCE,WARD,LONGITUDE,LATITUDE
06/04/2011,3,-87.61619704286184,41.82254380664193
06/04/2011,20,-87.62391924557963,41.79367531770095
看起来像:

[["DATE  OF OCCURRENCE", "WARD", "LONGITUDE" , "LATITUDE"],
 ["06/04/2011", "3", "-87.61619704286184", "41.82254380664193"],
 ["06/04/2011", "20", "-87.62391924557963", "41.79367531770095"]]
以下是我目前掌握的代码:

row = []
crimefile = open(fileName, 'r')
for line in crimefile.readlines():
    row.append([line])
    for i in line.split(","):
        row[-1].append(i)
然而,这给我带来了一个结果:

[['发生日期,病房,经度,纬度\n',发生日期,病房,经度,纬度\n'],
[06/04/2011,3,-87.61619704286184,41.82254380664193\n','06/04/2011','3','87.61619704286184','41.82254380664193\n'],
['06/04/2011,20,-87.62391924557963,41.79367531770095', '06/04/2011', '20', '-87.62391924557963', '41.79367531770095']]
我只想移除第一部分,然后用第二部分替换它。我该怎么做呢?

也许:

crimefile = open(fileName, 'r')
yourResult = [line.split(',') for line in crimefile.readlines()]

这看起来像一个CSV文件,因此您可以使用python来读取它。例如:

import csv

crimefile = open(fileName, 'r')
reader = csv.reader(crimefile)
allRows = [row for row in reader]

使用csv模块可以指定如何处理引号和换行符等内容。请参阅我上面链接的文档。

关于您开始的内容:

row = [[]] 
crimefile = open(fileName, 'r') 
for line in crimefile.readlines(): 
    tmp = []
    for element in line[0:-1].split(','):
        tmp.append(element)
row.append(tmp)

我查看了上面的文档和代码,但仍然有点不清楚。第三行在您的代码中具体做什么?第三行是python。
reader
类可以用作iterable,因此您可以迭代csv文件中的每一行。每行实际上是一个列表,包含csv文件每列的一个值。所以代码的第三行只是说:创建一个包含
读取器的每一行的列表。每一行本身就是一个值列表,因此最终的结果是,
allRows
是一个列表列表,正如您所希望的那样。@srgerg:上面的代码最好使用
allRows=list(reader)
,这与更复杂的列表理解
allRows=[row for row in reader]
一样。这适用于这个简单的示例,但是要学习像这样的数据文件的csv模块。当您开始读取数据中包含逗号的引号括起来的字符串字段时,您会很高兴。(split()不够聪明,无法知道哪些逗号是带引号字符串中的分隔符。)这种全数字数据集没有问题,但如果您从一开始就学会了好的做法,以后就不必忘记坏的做法。另外,请查看csv.DictReader类-它将使用文件的第一行作为键名,并为每一行提供一个dict,而不仅仅是一个列表。@michael:如果删除
.readlines()
,那会更好,因为它(1)不必要,(2)会白白占用内存。事实上,您可以简单地执行
[…for line In crimeFile]
,Python将简单地迭代文件的行,几乎不使用内存,而不是使用
readlines()
,后者将整个文件读入内存,并将所有行放入一个列表中(这会耗尽内存)@michael:此版本在最后一行项目中保留了换行符,这可能不方便。为crimefile中的行编写
比为crimefile中的行编写不必要的
。readlines()
。此外,
行[0:-1]
与Windows上的不一样,更高效、更清晰,因为Windows使用两个字节来表示换行符。您需要以
rU
模式打开文件,该模式将换行符转换为
\n
。在您的第一条评论中,我知道,我只是扩展了他的代码。在您的第二条评论中,第[0:-1]行在使用Python 2.7.2的Windows上运行良好。错误可能有点微妙(例如,序列
Hello\r\n
在打印时看起来正常)。打印tmp[-1],len(tmp[-1])
(就在
row.append()
之后)的结果是否如预期的那样?>>f=open('eol.txt','r')>>对于f中的l:。。。总计。追加(l)…>>>总计['test\n']>>>t=total[0][0:-1]>>>t'test'>>>print t t[-1]t>>>print len(t[-1])1