如何在python中解析和打印CSV数据中的字段

时间:2010-10-05 00:21:40

标签: python csv

我正在处理将文本导出为CSV类型数据的应用程序。文本被分解为难以回归的字段。我一直在尝试使用pythons CSV来恢复文本。

这是文字的一个例子:

{"This is an example", "of what I what I have to deal with.  ", "Please pick up th following:", "eggs", "milk", "Thanks for picking groceries up for me"}

这个文本读取此输出的最佳方法是:

This is an example
of what I have to deal with.
Please pick up the following:
eggs
milk
Thanks for picking up the groceries for me

我尝试了许多方法,但这些方法并不完全正确。

到目前为止我正在做的事情:

import csv
import xlrd
book = xlrd.open_workbook("book1.xls")
sh = book.sheet_by_index(0)
cat = 'Mister Peanuts'

for r in range(sh.nrows)[0:]:
    cat_name = sh.cell_value(rowx=r, colx=1)
    cat_behavior = sh.cell_value(rowx=r, colx=5)

    if sh.cell_value(rowx=r, colx=1) == cat :       
        csv_reader = csv.reader( ([ cat_behavior ]), delimiter=',') 
        for row in csv_reader:

                for item in row:
                        item = item.strip()
                        print(item)
            pass    
    pass

因此,为cat_behavior返回的实际单元格值如下:

['{"Mister Peanut spent 3.2 hours with {bojangles} fighting', '  "', ' "litter box was cleaned, sanitized and replaced "', ' " Food was replensished - with the best food possible"', ' ', ' "technician - don johnson performed all tasks"}']

我现在尝试采用上述方法并通过csv.reader运行以清理它并将其打印到文本文件中。我现在正试图使(项目)看起来正常。

4 个答案:

答案 0 :(得分:1)

import csv
with open('test') as f:
    for row in csv.reader(f):
        for item in row:
            item=item.strip('{} "')
            print(item)

strip method会从字符串item的左端或右端删除指定的字符。

答案 1 :(得分:1)

请解释一下你必须要做的事情。

x = {"This is an example", ......., "Thanks for picking groceries up for me"}

看起来像设置。然后你传递[x]作为csv.reader的第一个arg !!这不起作用:

[Python 2.7]
>>> import csv
>>> x = {"foo", "bar", "baz"}
>>> rdr = csv.reader([x]) # comma is the default delimiter
>>> list(rdr)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected string or Unicode object, set found
>>>

你说“将文本导出为CSV类型数据的应用程序” - “导出”是什么意思?如果它意味着“写入文件”,请(如果您不能按照遍布网络的示例)给我们转储文件以供查看。如果它意味着“方法/函数返回一个python对象”,请执行print(repr(python_object))并使用打印输出的复制/粘贴更新您的问题。

您有关于应用程序输出的文档吗?

评论和问题编辑后

更新

你说单元格值“返回”是:

['{“花生先生花了3.2个小时与'bojangles}战斗',''','”垃圾箱被清理,消毒并更换“','”食物得到了补充 - 用最好的食物“”, '',''技术员 - 让约翰逊执行所有任务“}']

这看起来就像你通过CSV mangle传递ACTUAL数据后打印的内容,而不是xlrd提取的原始值,这当然不是列表;它将是一个单一的unicode对象。

如果您之前没有阅读过:请解释一下开始的内容。

你认为可以做到这些:

(1)请执行print(repr(cat_behavior))并使用打印输出的复制/粘贴更新您的问题。

(2)说明有关创建Excel文件的应用程序的文档。

答案 2 :(得分:0)

您需要调查csv.writer将数据导出到csv,而不是csv.reader

编辑:问题冲突的正文和标题。您使用csv.reader是正确的。您可以在for循环中使用print来获得您所追求的结果。

答案 3 :(得分:0)

>>> s
'{"This is an example", "of what I what I have to deal with.  ", "Please pick up th following:", "eggs", "milk", "Thanks for picking groceries up for me"}'

>>> print s.replace(",","\n").replace("{","").replace("}","").replace('"',"")
This is an example
 of what I what I have to deal with.
 Please pick up th following:
 eggs
 milk
 Thanks for picking groceries up for me

>>> open("output.csv","w").write( s.replace(",","\n").replace("{","").replace("}","").replace('"',"") )