2024-06-17 09:36:33 发布
网友
我尝试使用Python在CSV文件的每一行合并三个字段。这很简单,只是有些字段被双引号包围,并包含逗号。下面是一个例子:
,,Joe,Smith,New Haven,CT,"Moved from Portland, CT",,goo,
有没有一个简单的算法可以用这种格式合并每行的字段7-9?并非所有行都包含双引号中的逗号。
谢谢。
像这样的?
import csv source= csv.reader( open("some file","rb") ) dest= csv.writer( open("another file","wb") ) for row in source: result= row[:6] + [ row[6]+row[7]+row[8] ] + row[9:] dest.writerow( result )
示例
>>> data=''',,Joe,Smith,New Haven,CT,"Moved from Portland, CT",,goo, ... '''.splitlines() >>> rdr= csv.reader( data ) >>> row= rdr.next() >>> row ['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CT', '', 'goo', '' ] >>> row[:6] + [ row[6]+row[7]+row[8] ] + row[9:] ['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CTgoo', '']
您可以使用csv模块来完成繁重的工作:http://docs.python.org/library/csv.html
你没有确切地说明你想如何合并列;大概你不想你的合并字段是“从波特兰,CTgoo移动”。下面的代码允许您指定分隔符字符串(可能是", ")并处理空/空字段。
", "
[transcript of session] prompt>type merge.py import csv def merge_csv_cols(infile, outfile, startcol, numcols, sep=", "): reader = csv.reader(open(infile, "rb")) writer = csv.writer(open(outfile, "wb")) endcol = startcol + numcols for row in reader: merged = sep.join(x for x in row[startcol:endcol] if x.strip()) row[startcol:endcol] = [merged] writer.writerow(row) if __name__ == "__main__": import sys args = sys.argv[1:6] args[2:4] = map(int, args[2:4]) merge_csv_cols(*args) prompt>type input.csv 1,2,3,4,5,6,7,8,9,a,b,c 1,2,3,4,5,6,,,,a,b,c 1,2,3,4,5,6,7,8,,a,b,c 1,2,3,4,5,6,7,,9,a,b,c prompt>\python26\python merge.py input.csv output.csv 6 3 ", " prompt>type output.csv 1,2,3,4,5,6,"7, 8, 9",a,b,c 1,2,3,4,5,6,,a,b,c 1,2,3,4,5,6,"7, 8",a,b,c 1,2,3,4,5,6,"7, 9",a,b,c
Python中有一个用于解析CSV文件的内置模块:
http://docs.python.org/library/csv.html
像这样的?
示例
您可以使用csv模块来完成繁重的工作:http://docs.python.org/library/csv.html
你没有确切地说明你想如何合并列;大概你不想你的合并字段是“从波特兰,CTgoo移动”。下面的代码允许您指定分隔符字符串(可能是
", "
)并处理空/空字段。Python中有一个用于解析CSV文件的内置模块:
http://docs.python.org/library/csv.html
相关问题 更多 >
编程相关推荐