使用python在空间上拆分csv列条目

时间:2015-10-26 20:55:10

标签: python csv

我正在尝试使用python创建一个新的csv文件。新的csv文件将是相同的,但有一个基于空格分隔符的条目拆分。

我的方法是分别打开具有读写访问权限的文件,跳过标题,然后在csv中写出我想要的特定列标题。

然后遍历修改相应部分的每一行,并使用.writerow函数将行写入新文件。

对该行进行一次迭代 ['data1', 'data2', 'data3 data4', 'data5', 'data6', 'data7' etc. ]

因此,在这种情况下,我选择row[2]选择'data3 data4'部分并尝试拆分这些部分以创建类似['data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7' etc. ]的列表

我尝试使用.split在列表中为我提供了一个列表,我已经尝试了.slicing,这意味着我可以展示data3data4。我还尝试了.replace给了我['data1', 'data2', 'data3,data4', etc.]。我非常沮丧,并想知道是否有人可能会给我一个关于我可能非常简单的解决方案的提示。完整代码如下。

import csv

with open('filepath', mode="rU") as infile:
    with open('filepath', mode="w") as outfile:

        csv_f = csv.reader(infile)
        next(csv_f, None)  # skip the headers

        writer = csv.writer(outfile)
        writer.writerow(['dataheader1', 'dataheader2', 'dataheader3', 'dataheader4', 'dataheader5', 'dataheader6', 'dataheader7' etc. ])

    for row in csv_f:
        row[2] = row[2].replace(' ', ',')
        print row

2 个答案:

答案 0 :(得分:2)

row[2:3] = row[2].split(' ')

演示:

>>> row = ['a', 'b', 'c d e f', 'g', 'h']
>>> row[2:3] = row[2].split(' ')
>>> row
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

答案 1 :(得分:0)

如果您不知道带空格的单元格在哪里,那么您正在寻找itertools.chain.from_iterable

import csv

with open('filepath', mode='rU') as infile,
     open('filepath2', mode='wb') as outfile:  # this changed slightly, look!
    csv_f = csv.reader(infile)
    writer = csv.writer(outfile)
    next(csv_f)  # skip headers
    row = next(csv_f)
    # row looks like
    # ['one', 'two', 'three four', 'five', ...]

    rewritten_row = itertools.chain.from_iterable(
        [cell.split() for cell in row])  # or map(str.split, row)
    # rewritten_row looks like
    # ['one', 'two', 'three', 'four', 'five', ...]

    writer.writerow(rewritten_row)