【问题标题】:How to write list of strings to csv or xlsx file如何将字符串列表写入 csv 或 xlsx 文件
【发布时间】:2020-10-03 14:58:33
【问题描述】:

我有一个列表列表;

L = 
[
['Route', 1, (20, 21), (22, 23),...]
["Path", 2,  (20, 21), (25, 26),...]
]

理想情况下,我希望将这些数据放入文件 foo.csv 或 bar.xslx 中,这样

  • 字符串是一行中的第一个元素,A1
  • 数字是2号,A2
  • 然后接下来的 n 个元素是数字的

每次我自己尝试这样做时,都会以逗号分隔项目。

【问题讨论】:

  • 你试过使用标准库的“csv”模块吗?

标签: python csv text output


【解决方案1】:

你的问题的答案取决于你的意思是这样的:

接下来的 n 个元素是数字对

如果您希望像 (20, 21) 这样的项目出现在您的 .csv 文件中,这是不可能的,因为它包含一个逗号。

如果您无法更改逗号分隔符,则需要选择其他文件格式。例如,您可以使用以下代码生成制表符分隔值 (.tsv):

L = [
    ['Route', 1, (20, 21), (22, 23)],
    ["Path", 2,  (20, 21), (25, 26)],
]

with open('out.tsv', 'w') as file:
    for row in L:
        file.write('\t'.join(map(str, row)) + '\n')

运行此代码生成以下out.tsv 文件:

Route   1   (20, 21)    (22, 23)
Path    2   (20, 21)    (25, 26)

【讨论】:

  • 我知道逗号可能不起作用,但这就是为什么我指定了 xlsx。有没有办法将其转置以使信息处于水平状态?路线 1 (20, 21), ...
  • 我编辑了上面的答案,使文件水平布局。这是您正在寻找的更多内容吗?不幸的是 .xlsx 文件是二进制文件,因此您无法使用 .write 语句轻松构建它们。也许你可以看看 xlsxwriter:xlsxwriter.readthedocs.io
【解决方案2】:

将熊猫导入为 pd

df = pd.DataFrame(L)

df.to_csv("out.csv")

【讨论】:

    【解决方案3】:

    如果您想要 csv,则必须将每个元组放在引号中。如果您的应用程序可以将第二个值作为字符串处理,您可以使用:

    with open('out.csv','wt') as f:
        for row in L:
           print (*list(map(lambda x:str(x).join('"'*2),row)),sep=',',file=f)
    

    为打印声明中的单行表示道歉,但弄清楚它的作用本身就是一个教训。

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2019-09-17
      • 2018-07-25
      • 2011-10-18
      • 2015-07-16
      • 2016-10-22
      相关资源
      最近更新 更多