我想创建一个小程序,将包含以逗号分隔的值的一列CSV文件转换为包含多个具有一个值的列的CSV文件:
输入文件:
输出文件:
因此我写了这段代码:
my_string1 = 'A,B,C,D,E'
my_string2 = 'A,B,C,D,E'
my_string3 = 'A,B,C,D,E'
my_list1 = my_string1.split(",")
my_list2 = my_string2.split(",")
my_list3 = my_string3.split(",")
path = 'C:\Dokumente\\n_1.csv'
rows = zip(my_list1,my_list2,my_list3)
with open(path, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for row in rows:
for column in row:
writer.writerow('%s;' % column)
但问题是它将所有值都写在一列中。
我想逐列编写,然后我想移到第二行再写一次?
我使用Eclipse Oxy使用PyDev和Python 2.7
答案 0 :(得分:2)
您的代码存在两个问题。首先,不需要使用zip()
,而只需通过rows = [my_list1,my_list2,my_list3]
创建列表列表。通过打印结果可以看出两者之间的差异:
rows_zip = zip(my_list1,my_list2,my_list3)
rows_list = [my_list1,my_list2,my_list3]
print (list(rows_zip))
#[('A', 'A', 'A'), ('B', 'B', 'B'), ('C', 'C', 'C'), ('D', 'D', 'D'), ('E', 'E', 'E')]
print (rows_list)
#[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
其次,您需要将整个列表my_list1
传递给writer.writerow()
,因为这会写入整个csv文件行。因此,您只需要一个循环,它遍历您的列表列表:
my_string1 = 'A,B,C,D,E'
my_string2 = 'A,B,C,D,E'
my_string3 = 'A,B,C,D,E'
my_list1 = my_string1.split(",")
my_list2 = my_string2.split(",")
my_list3 = my_string3.split(",")
path = 'C:\Dokumente\\n_1.csv'
rows = [my_list1,my_list2,my_list3]
with open(path, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for row in rows:
writer.writerow(row)
答案 1 :(得分:0)
将其保存为excel文件,根据定义,CSV是用逗号,冒号等分隔的一列。在您的代码中,您将分割一个字符串,然后再用逗号分隔它们,撤消之前刚刚执行的操作。 / p>
你可以使用pandas,加载CSV文件并将其保存为excel格式
df=pandas.read_csv("file.csv")
df.to_excel(filename)