将数据导出到文本文件和ValueError:格式为零长度字段名称

时间:2014-12-29 03:53:46

标签: python file

我正在使用此代码将我的数据导出到文本文件中(pl是列表列表。嵌套列表具有相同的长度。文件中的列将由嵌套列表的元素组成):

with open("par.txt", "a+") as f:
   f.write("id\ttrans_id\ttype\tstatus\tname\ttrans_type\ttrans_status\ttrans_name\n")

   for lst in pl:
       f.write(("{}\t"*16).format(lst[0].split()[1],lst[1].split()[1],lst[2].split()[1],lst[3].split()[1],lst[4].split()[1],lst[5].split()[1],lst[6].split()[1],lst[7].split()[1]))

但它给出了这个错误:

  

ValueError:格式为

的零长度字段名称

以下是我父母列表的一个小例子,但不是3,每个列表中有16个项目。如您所见,每个项目有2个单位,由制表符分隔。第一个单元是列名,第二个单元是对应的值。在文本文件中,每个嵌套列表都是一行(每对的第二个单元)

pl = [[' id "ENS001" ', ' name "EGSB" ', ' Trans "TTP" '], [' id "EN02" ', ' name "EHGT" ', ' Trans "GFT" ']]

2 个答案:

答案 0 :(得分:0)

您必须使用旧版本的Python;即2.6或3.0。在这些版本中,您需要明确编号str.format的格式字段:

f.write(("{0}\t"*16).format(
           ^

与索引一样,计数从0开始。

但请注意,现代Python不再需要这样做。版本2.7和3.1或更高版本将自动为您格式化格式字段。有关更多信息,请参阅:

https://docs.python.org/3/whatsnew/3.1.html#other-language-changes

答案 1 :(得分:0)

我在这个问题中告诉过你,error in writing a text file in python;将其从 16 更改为 8

with open("par.txt", "a+") as f:
   f.write("id\ttrans_id\ttype\tstatus\tname\ttrans_type\ttrans_status\ttrans_name\n")

   for lst in pl:
       f.write(("{}\t"*8).format(lst[0].split()[1],lst[1].split()[1],lst[2].split()[1],lst[3].split()[1],lst[4].split()[1],lst[5].split()[1],lst[6].split()[1],lst[7].split()[1]))

因为我们要将8个项目放入字符串中,因为您看到 format()中有8个项目。

  

实际上,无论重要的是哪个元素,我的意思是什么,即使这个元素中有100个元素,它也将通过 format()方法放置。

lst[0].split()[1]

例如,这个元素的长度并不重要,因为它在 format()函数中仍然是 元素,所以格式功能将放置此。