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

Lia*_*Fan 6 python list

我在尝试将文本文件转换为用逗号分割的列表列表时遇到问题.基本上,我想:

DATE  OF OCCURRENCE,WARD,LONGITUDE,LATITUDE
06/04/2011,3,-87.61619704286184,41.82254380664193
06/04/2011,20,-87.62391924557963,41.79367531770095
Run Code Online (Sandbox Code Playgroud)

看起来像:

[["DATE  OF OCCURRENCE", "WARD", "LONGITUDE" , "LATITUDE"],
 ["06/04/2011", "3", "-87.61619704286184", "41.82254380664193"],
 ["06/04/2011", "20", "-87.62391924557963", "41.79367531770095"]]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

row = []
crimefile = open(fileName, 'r')
for line in crimefile.readlines():
    row.append([line])
    for i in line.split(","):
        row[-1].append(i)
Run Code Online (Sandbox Code Playgroud)

但是,这让我得到了以下结果:

[['发生日期,遗嘱,长期,纬度\n','发生日期','WARD','LONGITUDE','LATITUDE \n'],['06/04/2011,3,-87.61619704286184, 41.82254380664193 \n','06/04/2011','3',' - 87.61619704286184','41 .82254380664193 \n'],['06/04/2011,201-87.62391924557963,41.79367531770095','06/04/2011','20',' - 87.62391924557963','41 .79367531770095']]

我只是希望能够删除第一部分并用第二部分替换它.我怎样才能做到这一点?

小智 20

也许:

crimefile = open(fileName, 'r')
yourResult = [line.split(',') for line in crimefile.readlines()]
Run Code Online (Sandbox Code Playgroud)

  • 这适用于这个简单的例子,但是学习csv模块这样的数据文件.当您开始阅读包含数据中逗号的引号括起的字符串字段时,您会很高兴.(split()不够聪明,不知道哪些逗号是引用字符串中的分隔符.)这个全数字数据集不是问题,但是如果你从一开始就学习好的做法,你就不会有以后忘掉坏人.另外,请查看csv.DictReader类 - 它将使用文件的第一行作为键名,并为每行提供一个dict,而不仅仅是列表. (3认同)
  • @michael:删除`.readlines()` 会更好,因为它(1) 没有必要,(2) 无用地占用内存。事实上,你可以简单地做 `[... for line incrimeFile]`,Python 将简单地遍历文件的行并且几乎不使用内存,而不是使用 `readlines()`,它将整个文件读入内存并将所有行放在一个列表中(这会占用内存)。 (3认同)

srg*_*erg 12

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

import csv

crimefile = open(fileName, 'r')
reader = csv.reader(crimefile)
allRows = [row for row in reader]
Run Code Online (Sandbox Code Playgroud)

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

  • @srgerg:上面的代码使用 `allRows = list(reader)` 会更好,它执行更复杂的列表理解 `allRows = [row for row in reader]` 所做的事情。 (2认同)