【问题标题】:Convert CSV file with values spareted in comma to multi columns CSV file将带有逗号分隔值的 CSV 文件转换为多列 CSV 文件
【发布时间】:2018-04-03 20:50:08
【问题描述】:

我想创建一个小程序,将一列包含以逗号分隔的值的 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)

但问题是它将所有值都写在一列中。

我想逐列写,然后我想移到第二行再写?

我使用带有 PyDev 和 Python 2.7 的 Eclipse Oxy

【问题讨论】:

  • 您的问题是您正在使用的 excel 或任何电子表格程序没有考虑逗号/分号作为分隔符。有关设置分隔符的帮助,请参阅superuser.com/questions/606272/…
  • 您遇到的错误是什么?
  • 我没有错误,程序运行得很好,但是它把所有的值都写在一列中,我不想要的,因为我想要的是把每个值都写在一个列中的分隔字符串中
  • @DoctorDoom 是的,你是对的。我使用的是 Python 3,它给出了不同的结果。我已经更新了与 Python 2 一起使用的答案

标签: python python-2.7 csv


【解决方案1】:

您的代码有两个问题。首先,不需要使用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)

【讨论】:

  • 首先非常感谢您纠正我的代码,这很棒其次我已经尝试了您的建议,但我在一个列中得到了相同的结果 CSV 文件你能用你的 SAME 试试这个代码吗环境要知道是代码问题还是配置问题我必须使用 MS Exel 2016
  • 如果您复制并粘贴上面的 exact 代码,这是否仍会生成一个包含一列的 csv 文件?尽管我使用的是 Windows 10,但这在 Python 2.7 中对我有用。
  • 好的,我认为我必须在我的操作系统中进行配置,非常感谢
【解决方案2】:

将其保存为 excel 文件,根据定义,CSV 是由逗号、冒号等分隔的一列。在您的代码中,您正在拆分一个字符串,然后再次编写它们,用逗号分隔,撤消您之前所做的操作。

您可以只使用 pandas,加载 CSV 文件并将其保存为 excel 格式

    df=pandas.read_csv("file.csv")
    df.to_excel(filename)

【讨论】:

  • 我收到此错误:未定义变量:pandas 它的导入是什么??
  • 你需要安装 pandas,然后“import pandas”
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2021-05-22
  • 2012-09-18
  • 2014-04-20
  • 1970-01-01
  • 2019-03-13
  • 2016-09-11
相关资源
最近更新 更多