Python为列和行创建/格式化CSV文件

时间:2012-10-06 16:09:43

标签: python csv

我有一个网络抓取工具,可将抓取数据保存到CSV文件中。数据如下所示:

random text
Johm May
1234 Big Street
Atlanta, GA 30331
acre .14  small
random text
Jane Jones
4321 Little Street
Atlanta, GA 30322
acre .07 small
random text

我想:

(1)在名称,街道,地址< ---中添加列。请注意,此示例以逗号分隔。

(2)我想在上面发布的地址结果中添加逗号。一个例子是:

jane jones
,4321 Little Street
,,Atlanta, GA 30344
,,,acre .07 small
,,,random text

请注意如何使用逗号将每行推送到所需的列,其中不需要的数据为.07,小的随机文本被推离指定的列。

我如何在python中执行此操作?我可以手工完成,但我正在处理成千上万的地址,我需要一个简单的方法来在python中执行此操作。

是否可以在删除之后将所有数据拉入列表,并为逗号分配变量,如a =,b = ,, c = ,,,然后将变量加入特定的列表中的行,然后再次保存?

此外,我还需要添加列信息:列名称,街道,地址

1 个答案:

答案 0 :(得分:2)

我只是猜测你在很多方面的意思,因为你的问题似乎缺少一些细节,但这应该会让你得到类似你想要的东西:

import csv

with open('data.txt', 'r') as f:
    with open('data.csv', 'wb') as csv_out:
        line_iter = iter(l.rstrip('\n') for l in f)
        writer = csv.writer(csv_out)
        writer.writerow(['Name', 'Street', '', 'Address'])
        try:
            line_iter.next()    # discard 'random text' (?)
            while True:
                writer.writerow([line_iter.next(), '', '', ''])
                writer.writerow(['', line_iter.next(), '', ''])
                writer.writerow(['', '', line_iter.next(), ''])
                writer.writerow(['', '', '', line_iter.next()])
                writer.writerow(['', '', '', line_iter.next()])
        except StopIteration:
            pass        # reached end of file

它为上面的示例数据提供了此输出:

Name,Street,,Address
Johm May,,,
,1234 Big Street,,
,,"Atlanta, GA 30331",
,,,acre .14 small
,,,random text
Jane Jones,,,
,4321 Little Street,,
,,"Atlanta, GA 30322",
,,,acre .07 small
,,,random text