我正在尝试为更大的项目打开,转换,操作和保存测试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。
答案 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 world
和and 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)