Python CSV分隔符默认为''?

时间:2013-09-30 11:28:13

标签: python csv python-3.x export-to-csv

我正在尝试为更大的项目打开,转换,操作和保存测试CSV文件。到目前为止,我已经打开了文件,将其转换为列表并对其进行操作。但我无法将其保存为格式正确的CSV文件。

此刻,它会保存,但由于某些未知原因,每列的分隔符似乎为' '。我的数据集基于售出的房价/位置/日期,因此每当中断(数据和时间之间)和位置(街道名称,城镇等)之间时,我都会得到一个新列,而所有其他没有空格的数据(价格,身份证号等)都被放入同一列,搞砸了我的数据。

另一方面,由于一些奇怪的原因,我的csv文件在每行之间保留了几个空行。我不知道发生了什么。

这是代码中值得怀疑的部分:

def write_new_file(lst, new_file):
'''(lst)->.CSV file
Takes a list and writes it into a .CSV file.
'''
    writer = csv.writer(new_file, delimiter=',')
    writer.writerows(lst)
    new_file.close()

这是我在shell中的输出:

>>> doc[0]

['{AACDC187-2E3E-4705-BCF3-0001C4187ADD},', '208000,', '28/06/2013 00:00,', 'AL23HX,', 'F,', 'N,', 'L,', '17,', ',', 'TENNYSON ROAD,', ',', 'ST ALBANS,', 'ST ALBANS,', 'HERTFORDSHIRE,']

感谢任何帮助!

编辑:我已经连续几周都在编程了,所以如果我是个白痴我很抱歉!

编辑4:

我已将我的代码更改为使用csv.reader函数,该函数运行良好,使程序更小。它现在看起来像这样:

    #create an empty variable

doc= []

with open(file2, 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        doc.append(row)

这是我的shell输出:

    >>> doc[0]
['{AACDC187-2E3E-4705-BCF3-0001C4187ADD}', '208000', '28/06/2013 00:00', 'AL2 3HX', 'F', 'N', 'L', '17', '', 'TENNYSON ROAD', '', 'ST ALBANS', 'ST ALBANS', 'HERTFORDSHIRE', 'A']

但是我的CSV输出是相同的,列根据字符串中的空格分开,而不是根据分隔列表项的逗号分隔。行之间仍然有一个空行。

我的写作功能没有改变。

最终编辑:解决了! calc最终搞砸了,而不是Python。

3 个答案:

答案 0 :(得分:2)

用于读取csv的CSV文件的Python csv.reader模块中的默认分隔符是逗号,因此如果您的CSV文件与delimiter=','一起保存,则还应正确读取默认情况下,除非您明确指定了错误的分隔符值。

CSV文件内容:

foo,bar,baz
hello world,again,and again

代码:

>>> list(csv.reader(open('test.csv', 'rb')))
[['foo', 'bar', 'baz'], ['hello world', 'again', 'and again']]

如您所见,hello worldand again中的空格被正确解析(即被忽略)。

要了解您的代码无法正常工作的原因,您必须向我们展示您的代码的更多(相关部分)。

<强>更新

根据您的编辑,您似乎正在使用自己的代码来解析CSV文件 - 不要那样(特别是如果您只是编程/ Python的初学者) 。使用内置的csv模块。

with open('test.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        ...
    # or just rows = list(reader)

此外,您的CSV解析代码非常低效,并且可能(或者,很明显)有错误;但我并没有真正去尝试找到这个bug,因为你可以自己动手(为了学习目的 - 使用csv.reader)。

更高效的CSV解析代码的一个简单示例是:

with open(filename, 'rb') as f:
    rows = [line.split(',') for line in f]

......但这没有考虑引用;实现引用支持不会那么简单,并且可能会使用正则表达式或解析代码进行访问。

答案 1 :(得分:0)

我认为问题的原因在于您的CSV解析代码 - 您似乎是在数据中留下逗号分隔符。

当您将此文件写入CSV文件时,CSV模块会发现数据中有逗号,并且使用单引号字符引用数据,这样当您再次读回数据时,它可以区分数据中的逗号分隔符和逗号。

如果您修改阅读器以删除逗号分隔符,问题就会消失。

答案 2 :(得分:0)

您也可以尝试设置quotechar和qutoting:

writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)