Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python csv.writer将所有内容写入一个单元格_Python_Excel_Csv_Python 3.x - Fatal编程技术网

Python csv.writer将所有内容写入一个单元格

Python csv.writer将所有内容写入一个单元格,python,excel,csv,python-3.x,Python,Excel,Csv,Python 3.x,编辑:由于@ayhan,问题得以解决。如果您来自波兰,请使用分号而不是逗号作为分隔符 我有一个列表,如下所示: list = [['edytor poranka PN', '1/04/2016', '15:00'], ['edytor PN 2', '2/04/2016', '08:30'], ['edytor PN noc', '3/04/2016', '22:00']] with open('file.csv', 'w') as f: writer = csv.writer(f,

编辑:由于@ayhan,问题得以解决。如果您来自波兰,请使用分号而不是逗号作为分隔符

我有一个列表,如下所示:

list = [['edytor poranka PN', '1/04/2016', '15:00'], ['edytor PN 2', '2/04/2016', '08:30'], ['edytor PN noc', '3/04/2016', '22:00']]
with open('file.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(list)
csv.writer
将每个列表写入一个单元格,而不是三个单独的单元格

我的代码如下所示:

list = [['edytor poranka PN', '1/04/2016', '15:00'], ['edytor PN 2', '2/04/2016', '08:30'], ['edytor PN noc', '3/04/2016', '22:00']]
with open('file.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(list)
我也尝试过这种方法:

for i in list:
    writer.writerow(i)

而且它也不起作用。我的另一个问题是,每一行之间都有一个额外的空行,我不知道如何去掉它。我知道也有类似的问题,但没有解决方案适合我。

您需要指定换行符,以防止在每次迭代中添加额外的行。同时命名变量
list
是个坏主意,因为它是内置类型

with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for a_list in lists:
        writer.writerow(a_list)

您需要指定换行符,以防止在每次迭代中添加额外的行。同时命名变量
list
是个坏主意,因为它是内置类型

with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for a_list in lists:
        writer.writerow(a_list)

Slayer的代码在美国对我有效,但如果我将我的Windows区域和语言设置更改为波兰,则不会生效,我最终能够重现您的问题

根据@ayhan的说法,这是因为Excel中的一个bug,它期望
用作十进制分隔符(十进制标记)的区域设置中读取和保存csv文件时,
将作为分隔符,例如在波兰(以及世界大多数其他国家)

最简单的解决方法可能是在创建
csv.writer
对象时,只需指定Excel在您所在区域所需的分隔符,如下所示:

#!/usr/bin/env python3

import csv

list_of_lists = [['edytor poranka PN', '1/04/2016', '15:00'],
                 ['edytor PN 2', '2/04/2016', '08:30'],
                 ['edytor PN noc', '3/04/2016', '22:00']]

with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=';')
    for sublist in list_of_lists:
        writer.writerow(sublist)
运行脚本后,
file.csv
的内容:

edytor poranka PN;1/04/2016;15:00
edytor PN 2;2/04/2016;08:30
edytor PN noc;3/04/2016;22:00
之后,如果我在Microsoft Excel 2013中打开它,在Windows区域和语言控制面板中将我的Windows格式和位置设置为“波兰”,我会看到以下内容(现在是正确的):

更新

动态执行此操作的一种方法是让脚本根据当前的区域设置确定要使用的分隔符,并在发生冲突时选择不同的分隔符-尽管硬编码
应该可以在任何不使用它作为小数点的地方使用(我不知道有哪个地方可以)

既然我们现在知道是什么导致了这个问题,我也会拿出
for
loop Slayer,然后回到使用
writerows()
的代码版本


Slayer的代码在美国对我有效,但如果我将我的Windows区域和语言设置更改为波兰,则不会生效,我最终能够重现您的问题

根据@ayhan的说法,这是因为Excel中的一个bug,它期望
用作十进制分隔符(十进制标记)的区域设置中读取和保存csv文件时,
将作为分隔符,例如在波兰(以及世界大多数其他国家)

最简单的解决方法可能是在创建
csv.writer
对象时,只需指定Excel在您所在区域所需的分隔符,如下所示:

#!/usr/bin/env python3

import csv

list_of_lists = [['edytor poranka PN', '1/04/2016', '15:00'],
                 ['edytor PN 2', '2/04/2016', '08:30'],
                 ['edytor PN noc', '3/04/2016', '22:00']]

with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=';')
    for sublist in list_of_lists:
        writer.writerow(sublist)
运行脚本后,
file.csv
的内容:

edytor poranka PN;1/04/2016;15:00
edytor PN 2;2/04/2016;08:30
edytor PN noc;3/04/2016;22:00
之后,如果我在Microsoft Excel 2013中打开它,在Windows区域和语言控制面板中将我的Windows格式和位置设置为“波兰”,我会看到以下内容(现在是正确的):

更新

动态执行此操作的一种方法是让脚本根据当前的区域设置确定要使用的分隔符,并在发生冲突时选择不同的分隔符-尽管硬编码
应该可以在任何不使用它作为小数点的地方使用(我不知道有哪个地方可以)

既然我们现在知道是什么导致了这个问题,我也会拿出
for
loop Slayer,然后回到使用
writerows()
的代码版本


很好的建议,但是OP说他们已经尝试了
列表中的i:
writer.writerow(i)
。OP说他们已经尝试过了,但是每一行都被一个空行隔开。这就是它不起作用的原因。由于未设置
换行符
parameter@Bolesław:我认为您应该在问题中添加几行,显示名为
list
.FWIW的变量的部分或全部实际内容,此答案中的代码适用于您的示例数据。使用示例数据运行此代码后,输出.csv文件的内容:
edytor poranka PN,2016年4月1日,15:00
edytor PN 2,2/04/2016,08:30
edytor PN noc,2016年4月3日,22:00
好的建议,但是OP说他们已经尝试了
列表中的i:
writer.writerow(i)
。OP说他们已经尝试了,但是每一行都被一个空行隔开。这就是它不起作用的原因。由于未设置
换行符
parameter@Bolesław:我认为您应该在问题中添加几行,显示名为
list
.FWIW的变量的部分或全部实际内容,此答案中的代码适用于您的示例数据。使用示例数据运行此代码后,输出.csv文件的内容:
edytor poranka PN,1/04/2016,15:00
edytor PN 2,2/04/2016,08:30
edytor PN noc,3/04/2016,22:00
对我不起作用。我正在使用excel 2010。这可能是个问题吗?操作系统的区域设置可能是个问题。如果默认分隔符不是逗号,Excel将在同一单元格中显示所有分隔符。我想您使用Excel 2010可能是原因之一(但对此表示怀疑)。csv文件的默认分隔符始终为逗号(请参见
方言.delimiter
),并且不受操作系统的re影响