以特定格式导入.text数据

时间:2012-07-04 02:29:41

标签: python

这是以下数据样本

"TABITHA","OLLIE","JAIME","WINIFRED"

后跟一段正确读取它的代码。

with open("names.txt", 'rb') as f:
    data = [map(str, line.split(',')) for line in f]

但是,这会将其作为列表列表读入。该列表只有一个列表'高',

e.g. [["TABITHA", "OLLIE", "JAIME", "WINIFRED"]]

因此可能只是一个列表,而不是列表列表。有没有办法将其作为列表阅读?学习之旅仍在继续: - )

4 个答案:

答案 0 :(得分:3)

使用“包含电池”csv(逗号分隔值)模块。尽管名称,它也可以配置为其他分隔符,并有许多其他选项。

import csv
with open('names.txt','rb') as f:
    for line in csv.reader(f):
        print line

输出:

['TABITHA', 'OLLIE', 'JAIME', 'WINIFRED']

答案 1 :(得分:0)

修改

功能性,“自己动手”,代码:

with open("names.txt", 'rb') as f:
    for line in f:
       line = line.strip()
       line = [w.replace('"','') for w in line.split(',')]
       print line

创建列表 line

['TABITHA', 'OLLIE', 'JAIME', 'WINIFRED']

答案 2 :(得分:0)

阅读此类内容的最佳方式是使用csv module。这将正确处理可能出现在引用值中的嵌入式逗号。

答案 3 :(得分:0)

如果你想愚蠢而不使用CSV模块:

sum([line.split(", ") for line in f], [])

编辑:那么我的初始数据有什么问题呢?

>>> f
['TABITHA, OLLIE, JAIME, WINIFRED', 'Spam, Eggs, Dead Parrots']
>>> sum([line.split(", ") for line in f], [])
['TABITHA', 'OLLIE', 'JAIME', 'WINIFRED', 'Spam', 'Eggs', 'Dead Parrots']

使用文件:

$ cat temp.csv
foo, bar, baz
spam, eggs, quux
$ python
>>> f = open("temp.csv")
>>> sum([line.split(", ") for line in f], [])
['foo', 'bar', 'baz\n', 'spam', 'eggs', 'quux\n']

(添加map(str.strip, ...)以摆脱尾随空格)