答:不要用核弹。使用csv.writer
而不是numpy.savetxt
。
我对Python和NumPy还不熟悉。似乎将二维字符串数组(包含逗号)保存到CSV文件中并不难,但我无法使它按我所希望的方式工作。
假设我有一个类似这样的数组(由列表列表组成):
[['text1, text2', 'text3'],
['text4', 'text5']]
我想要一个CSV文件,在Excel(管道=单元格分隔符)中是这样的(或没有引号字符):
'text1, text2' | 'text3'
'text4' | 'text5'
我正在使用numpy.savetxt(filename, array, fmt="%s")
,得到以下CSV输出(带方括号):
['text1, text2','text3']
['text4','text5']
在Excel中显示如下:
['text1 | text2' | 'text3']
['text4' | 'text5']
我尝试过使用savetxt分隔符参数,但没有更改输出。
我需要手动操作吗?如果是,请告诉我是否有任何捷径我应该知道。
最后,我需要将CSV导入Postgresql数据库。我不完全清楚CSV格式到底需要什么才能像预期的那样工作,但我假设如果它在Excel中看起来有问题,它很可能会在Postgres中出错。Postgres documentation说:
The values in each record are separated by the DELIMITER character. If the value contains the delimiter character, the QUOTE character, the NULL string, a carriage return, or line feed character, then the whole value is prefixed and suffixed by the QUOTE character, and any occurrence within the value of a QUOTE character or the ESCAPE character is preceded by the escape character. You can also use FORCE_QUOTE to force quotes when outputting non-NULL values in specific columns.
谢谢!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
实际输入和输出,以防它们有相关的不同:
数组:
[['8908232', 'Plant Growth Chamber Facility at the Department of Botany, University of Wisconsin-Madison', 'DBI', 'INSTRUMENTAT & INSTRUMENT DEVP', '1/1/90', '12/19/89', 'WI', 'Standard Grant', 'Joann P. Roskoski', '12/31/91', '$94,914.00 ', 'BIO', '1108', '', '$0.00 ']]
CSV输出:
['8908232', 'Plant Growth Chamber Facility at the Department of Botany, University of Wisconsin-Madison', 'DBI', 'INSTRUMENTAT & INSTRUMENT DEVP', '1/1/90', '12/19/89', 'WI', 'Standard Grant', 'Joann P. Roskoski', '12/31/91', '$94,914.00 ', 'BIO', '1108', '', '$0.00 ']
Excel版本:
['8908232' 'Plant Growth Chamber Facility at the Department of Botany University of Wisconsin-Madison' 'DBI' 'INSTRUMENTAT & INSTRUMENT DEVP' '1/1/90' '12/19/89' 'WI' 'Standard Grant' 'Joann P. Roskoski' '12/31/91' '$94 914.00 ' 'BIO' '1108' '' '$0.00 ']
添加
fmt="%s"
不会在每个字段周围加引号,引号是字符串%s
的Python字符串文本的一部分,而%s
只是说任何值都应该格式化为字符串。如果你想在所有东西周围加引号,你需要用格式字符串的引号,比如fmt='"%s"'
。然而,即使你不这样做,你显示的行不可能产生你显示的输出。NumPy不可能将逗号更改为管道字符,也不可能使用管道字符作为分隔符。你唯一能得到的就是添加
delimiter=' |
。如果你加上这个…它不会改变,你会得到:所以不管你真正的问题是什么,都不可能是你描述的那个。
同时,如果您试图尽可能灵活地为非数字数据编写CSV文件,那么标准库的^{} 模块比NumPy强大得多。顾名思义,NumPy的优势在于处理数值数据。下面介绍如何使用
csv
:这将默认为
,
作为分隔符。由于某些字符串中有,
字符,默认情况下,它会引用这些字符串。但是您可以配置引用/转义行为、引用字符、分隔符以及NumPy不能配置的所有其他东西相关问题 更多 >
编程相关推荐