我正在尝试使用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
,这意味着我可以展示data3
或data4
。我还尝试了.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
答案 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)