【问题标题】:Automatic reformatting when using csv writer python module使用 csv writer python 模块时自动重新格式化
【发布时间】:2014-03-31 21:53:06
【问题描述】:

如何防止 Python 自动将对象以不同于原始格式的格式写入 csv?例如,我有如下列表对象:

row = ['APR16', '100.00000']

我想按原样写这一行,但是当我使用 csv writer 的 writerow 函数时,它会以 16-Apr 和 10 的形式写入 csv 文件。我想保留原始格式。

编辑:

代码如下:

import pandas as pd

dates = ['APR16', 'MAY16', 'JUN16']
numbers = [100.00000, 200.00000, 300.00000]

for i in range(3):
    row = []
    row.append(dates[i])
    row.append(numbers[i])
    prow = pd.DataFrame(row)
    prow.to_csv('test.csv', index=False, header=False)

结果:

【问题讨论】:

  • 你怎么知道是 Python 做的,而不是你读到的任何东西都是这样解释的?
  • 所以您是说 Excel 正在将对象更改为日期格式等等?我将如何更改该设置,然后在写入数据时自动重新格式化数据?
  • 如果你想让它们内联,请参阅:thispd.DataFrame([(dates[i], numbers[i])])
  • 这不再是 Python 问题,而是 Excel 问题。使用“数据/来自文本”(参见here)并将导入的列类型设置为文本,而不是常规。

标签: python csv writer


【解决方案1】:

使用pandas

import pandas as pd

dates = ['APR16', 'MAY16', 'JUN16']
numbers = [100.00000, 200.00000, 300.00000]

data = zip(dates,numbers) 

fd = pd.DataFrame(data)

fd.to_csv('test.csv', index=False, header=False)  # csv-file
fd.to_excel("test.xls", header=False,index=False) # or xls-file

我的终端中的结果:

➜  ~  cat test.csv 
APR16
100.00000

LibreOffice 中的结果:

【讨论】:

  • 我有多行,每行都在 for 循环中声明。使用此代码,它似乎一直在重写文件。
  • 贴一段代码让你的观点更清楚。我不明白为什么上述解决方案不应该用于多行
  • 不管怎样,当我在 Excel 中查看它时,它仍然会将 APR16 转换为日期,这是如上所述解释方式的问题
  • “它”仍然转换你说的。它是什么”? Excel 还是 Python?无论如何,请参阅我的答案中的屏幕截图。看起来不错,我想说.. 使用循环发布您的代码,以便我们查看它。
  • 已编辑问题
猜你喜欢
  • 2016-10-04
  • 2015-12-07
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 2020-10-28
相关资源
最近更新 更多