如何将列表列表写入文件

问题描述 投票:0回答:3

我有一个看起来像这样的列表

list_geo = [[5], ['Optimized energy: -39.726863484331 E_h'],
    ['C\t', '-1.795202\t', ' 0.193849\t', ' 0.019437'],
    ['H\t', '-0.728046\t', '0.337237\t', ' 0.135687'],
    ['H\t', '-2.044433\t', '-0.840614\t', ' 0.220592'],
    ['H\t', '-2.085087\t', ' 0.444715\t', '-0.993886'],
    ['H\t', '-2.323267\t', ' 0.834105\t', ' 0.714902']]

我想写这个文件outputfile,我试着用

with open(outputfile, "w") as output_file:
    output_file.write(list_geo)

但这不起作用。加入list_geo也行不通。我怎么能保存这个?

python list file-io file-writing
3个回答
1
投票

你需要使用for循环

with open("path /of/op/file.txt", "w") as output_file:
   for value in list_geo:
       output_file.write(str(value))

0
投票

您不能直接将列表写入文件,但可以编写字符串/字符串流。

将列表转换为字符串,然后将字符串写入文件

data = ['1','2'] 
data_string = ','.join(data) # create string and then store

with open('f.txt','w') as f:
        f.write(data)

0
投票

我想把你的列表的每个子列表写成一行。

那就是你需要的:

list_geo = [[5], ['Optimized energy: -39.726863484331 E_h'],
    ['C\t', '-1.795202\t', '0.193849\t', '0.019437'],
    ['H\t', '-0.728046\t', '0.337237\t', '0.135687'],
    ['H\t', '-2.044433\t', '-0.840614\t', '0.220592'],
    ['H\t', '-2.085087\t', '0.444715\t', '-0.993886'],
    ['H\t', '-2.323267\t', '0.834105\t', '0.714902']]

with open("file.txt", "w") as output_file:
   for line in list_geo:
       output_file.write("".join([str(i) for i in line]))
       output_file.write("\n")

运行脚本后file.txt的内容:

5
Optimized energy: -39.726863484331 E_h
C       -1.795202       0.193849       0.019437
H       -0.728046       0.337237       0.135687
H       -2.044433       -0.840614      0.220592
H       -2.085087       0.444715       -0.993886
H       -2.323267       0.834105       0.714902

说明:

  • "".join()获取一个字符串列表,并将它们连接在一起,两者之间没有空格
  • [str(i) for i in line]将列表中的每个元素转换为字符串(只需要将[5]作为列表中的第一个子列表)

有没有办法保留正数的额外空间?

如果你想为你的行添加格式,你最好先将值作为实数,即你需要['C\t', '-1.795202\t', ' 0.193849\t', ' 0.019437']而不是['C', -1.795202, 0.193849, 0.019437],然后用例如"{}\t{:>9f}\t{:>9f}\t{:>9f}\n".format(*line)格式化它们。 list_geo = [[5], ['Optimized energy: -39.726863484331 E_h'], ['C\t', '-1.795202\t', '0.193849\t', '0.019437'], ['H\t', '-0.728046\t', '0.337237\t', '0.135687'], ['H\t', '-2.044433\t', '-0.840614\t', '0.220592'], ['H\t', '-2.085087\t', '0.444715\t', '-0.993886'], ['H\t', '-2.323267\t', '0.834105\t', '0.714902']] with open("file.txt", "w") as output_file: for line in list_geo: if len(line) == 4: # treat first element as string, convert rest to float line = [el.strip() if i == 0 else float(el) for i,el in enumerate(line)] line_formatted = "{}\t{:>9f}\t{:>9f}\t{:>9f}\n".format(*line) output_file.write(line_formatted) else: output_file.write("".join([str(i).strip(" ") for i in line])) output_file.write("\n")

如果你以某种方式从脏源获取这个列表你无法改变,那么你需要以某种方式预处理该行,例如像这样:

5
Optimized energy: -39.726863484331 E_h
C       -1.795202        0.193849        0.019437
H       -0.728046        0.337237        0.135687
H       -2.044433       -0.840614        0.220592
H       -2.085087        0.444715       -0.993886
H       -2.323267        0.834105        0.714902

结果如下:

qazxswpoi
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.