【问题标题】:Trouble in saving a list to csv将列表保存到 csv 时遇到问题
【发布时间】:2014-06-06 08:52:36
【问题描述】:

我正在使用 csv 模块中的 writerow 函数将列表保存到 csv。当我在 MS office Excel 中打开最终文件时出现问题。 在我遇到这个问题之前,我试图处理的主要问题是将列表保存到每一行。它将每一行保存到第 1 行的一个单元格中。我做了一些小的改变,现在发生了。作为一个python新手,我当然很困惑。

import csv
inputfile = open('small.csv', 'r')
header_list = []
header = inputfile.readline()
header_list.append(header)
input_lines = []
for line in inputfile:
    input_lines.append(line)
inputfile.close()

AA_list = []
for i in range(0,len(input_lines)):
    if (input_lines[i].split(',')[4]) == 'AA':#column4 has different names including 'AA'
         AA_list.append(input_lines[i])

full_list = header_list+AA_list

resultFile = open("AA2013.csv",'w+')
wr = csv.writer(resultFile, delimiter = ',')
wr.writerow(full_list)

谢谢!

更新: full_list 如下所示:['1,2,3,"MEM",...]

UPDATE2(4 月 22 日): 现在我在同一行中获得了三个数据单元格(A1 中的标题和 A2 和 A3 中的其余部分)。显然,换行符不适用于一个大列表中的三个项目。我认为现在更具体的问题是如何将每条记录后面带有 '\n' 的记录列表保存到 csv。

UPDATE3(4 月 23 日): 原始文件

【问题讨论】:

  • 您能否在答案中包含full_list 的开头?此外,您的第二个 for 循环非常不符合 Python 风格,您应该使用 for il in input_lines:,然后将 input_lines[i] 替换为 il
  • @Jasper I 我添加了要更新的完整列表。
  • 您的代码存在许多问题,我理解这是因为您对 Python 非常陌生。我强烈建议您花时间阅读tutorial(或this,如果您使用的是Python 3.x)。还要研究csv module docs,其中包括一些如何使用它的示例。

标签: python python-2.7 csv


【解决方案1】:

仅导入csv 模块是不够的,您还需要使用它。现在,您将每一行作为一个完整的字符串附加到您的列表中,而不是一个字段列表。

开始

with open('small.csv', 'rb') as inputfile:
    reader = csv.reader(inputfile, delimiter=",")
    header_list = next(reader)
    input_lines = list(reader)

现在header_list 包含所有标题,input_lines 包含所有行的嵌套列表,每一行都分为列。

我认为其余的应该很简单。

【讨论】:

  • 您指定分隔符的任何特殊原因? (不是说错了,只是问问。)
  • 我意识到如果我将 input_lines 设为列表对象,我将不得不更改我的其余代码。我找到了一个平面列表的解决方案(在我的例子中是 full_list),但是三个结果仍然不是理想的段(一个单元格中的每个记录在 excel 中采用 A1 到 C1)。 gis.stackexchange.com/questions/72458/…
【解决方案2】:

append() 在另一个列表的末尾附加一个列表。因此,当您编写header_list.append(header) 时,它会将header 作为字符列表并附加到header_list。你应该写

headers = header.split(',')
header_list.append(headers)

这将用逗号分隔标题行,headers 将是标题单词的列表,然后将它们正确附加到 header_list 之后。

AA_list.append(input_lines[i]) 也是如此。

【讨论】:

  • 我在我的代码中相应地纠正了错误,并在同一行中获得了三个数据单元格(A1 中的标题和 A2 和 A3 中的其余部分)。显然,换行符不适用于一个大列表中的三个项目。
  • 能否提供csv文件的前几行?
  • 原始 csv?还是输出?
  • 我上传了一张原始数据的图片。
【解决方案3】:

我想通了。 writerow 括号中的 [val]、val 和 val.split(",") 的区别是:

[val]:一个字符串,包含所有内容,只取 excel 中的第一列(A1、B1、C1 等中的标题和“2013, 1, 2,...”)。

val:每个字母或逗号或空格(我忘了技术术语)在excel中占一个单元格。

val.split(","):用逗号分割[val]中的字符串,将逗号分隔的每个字符串放入excel单元格中。

这是我发现的:1.the right way to export the flat list to each line by using with syntax, 2.split the list when writing row

csvwriter.writerow(JD.split())

full_list = header_list+AA_list
with open("AA2013.csv",'w+') as resultFile:
    wr = csv.writer(resultFile, delimiter= ",", lineterminator = '\n')
    for val in full_list:
        wr.writerow(val.split(','))

想要的输出

请纠正我错误使用的术语和语法!谢谢。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2020-07-29
    • 2011-05-23
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多