Python CSV delimeter默认为'';?

Python CSV delimeter默认为'';?,python,csv,python-3.x,export-to-csv,Python,Csv,Python 3.x,Export To Csv,我正在尝试为一个更大的项目打开、转换、操作和保存一个测试CSV文件。到目前为止,我已经打开了该文件,将其转换为列表并对其进行了操作。但我无法将其保存为格式正确的CSV文件 目前,它可以节省,但由于未知的原因,每列的delimeter似乎是'。我的数据集基于售出的房价/地点/日期,因此每当时间(在数据和时间之间)和地点(在街道名称、城镇等之间)出现中断时,我会得到一个新的列,而所有其他没有空格的数据(价格、身份证号码等)都会放在同一列中,把我的数据搞砸了 另一方面,出于某种奇怪的原因,我的csv文

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

目前,它可以节省,但由于未知的原因,每列的delimeter似乎是
'
。我的数据集基于售出的房价/地点/日期,因此每当时间(在数据和时间之间)和地点(在街道名称、城镇等之间)出现中断时,我会得到一个新的列,而所有其他没有空格的数据(价格、身份证号码等)都会放在同一列中,把我的数据搞砸了

另一方面,出于某种奇怪的原因,我的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。

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

CSV文件内容:

foo,bar,baz
hello world,again,and again
代码:

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

要理解为什么您的代码不能按您希望的方式工作,您必须向我们展示更多的代码(相关部分)

更新:

根据您的编辑,看起来您正在使用自己的代码解析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]

…但这不考虑引用;实现引用支持并不是那么简单,可能会使用正则表达式或解析代码进行调用。

Python
csv
模块中用于使用
csv读取csv文件的默认分隔符。reader
是逗号,因此如果您的csv文件是使用
分隔符=',
保存的,默认情况下也应该正确读入它,除非您明确指定了错误的分隔符值

CSV文件内容:

foo,bar,baz
hello world,again,and again
代码:

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

要理解为什么您的代码不能按您希望的方式工作,您必须向我们展示更多的代码(相关部分)

更新:

根据您的编辑,看起来您正在使用自己的代码解析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]

…但这不考虑引用;实现引用支持并不是那么简单,可能需要使用正则表达式或解析代码。

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

当您将其写入CSV文件时,CSV模块会发现数据中有逗号,并使用单引号字符引用数据,因此当您再次读取数据时,可以分辨数据中逗号分隔符和逗号之间的差异


如果您修复了读卡器以删除逗号分隔符,那么问题应该会消失。

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

当您将其写入CSV文件时,CSV模块会发现数据中有逗号,并使用单引号字符引用数据,因此当您再次读取数据时,可以分辨数据中逗号分隔符和逗号之间的差异


如果将读卡器修复为删除逗号分隔符,则问题应消失。

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

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

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

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

请同时显示读取文件的代码。这就是问题所在。谢谢Tim,我添加了代码。这实际上并没有打开文件。您使用什么代码将文件读入
doc
?您既不显示作为“lst”传递给函数的内容,也不显示
doc
是什么,以及您是如何构建它的,因此我们帮不了什么忙。请阅读:您应该使用
csv.reader
重新读取文件,而不是滚动您自己的csv阅读器。请看Erik的答案。请同时显示代码以阅读文件