Python CSV delimeter默认为'';?
我正在尝试为一个更大的项目打开、转换、操作和保存一个测试CSV文件。到目前为止,我已经打开了该文件,将其转换为列表并对其进行了操作。但我无法将其保存为格式正确的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文件在每行之间保留了几行空行。我不知道发生了什么事
这是代码中有问题的部分:
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]
…但这不考虑引用;实现引用支持并不是那么简单,可能会使用正则表达式或解析代码进行调用。Pythoncsv
模块中用于使用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的答案。请同时显示代码以阅读文件