1

我试图获得如下输出:

KPLR003222854-2009131105131

在一个文本文件中。我试图得出该输出的方式是这样的:

with open('Processed_Data.txt', 'r') as file_P, open('KIC_list.txt', 'w') as namelist:
    nameData = []           
    for line in file_P:
        splt_file_P = line.split()
        nameData.append(splt_file_P[0])
    for key in nameData:
        namelist.write('\n' 'KPLR00' + "".join(str(w) for w in nameData) + '-2009131105131')

但是我遇到了一个问题,nameData 数组中的数字都同时出现在指定的输出中,而不是像上面显示的那样干净地使用 ID,输出是这样的:

KPLR00322285472138721382172198371823798123781923781237819237894676472634973256279234987-2009131105131

所以我的问题是我如何循环写入命令,以使我能够正确输出每个单独的 ID(每个 ID 都有一个特定的索引值,但有超过 150 个)。

编辑:另外,列表中的一些 ID 的长度不同,所以我想在“键”前面添加 0 以使它们都等于 9 位。我通过在引号中将 0 添加到 KPLR 中来欺骗这一点,但并非所有 ID 都只需要两个 0。问题是,我可以在 KPLR 和密钥之间添加 0 以匹配 9 位格式吗?

4

3 回答 3

1

您的代码看起来像预期的那样工作:"".join(str(w) for w in nameData)创建一个由nameData.

你想要的机会;

for key in nameData:
    namelist.write('\n' 'KPLR00' + key + '-2009131105131')

甚至更好:

for key in nameData:
    namelist.write('\nKPLR%09i-2009131105131'%int(key)) #no string concatenation

字符串连接往往较慢,如果您不仅对字符串进行操作,还将涉及对str. 这是一对显示差异的ideone片段:http: //ideone.com/RR5RnLhttp://ideone.com/VH2gzx

此外,上面带有格式字符串的表格'%09i'将用 0 填充,以使数字最多为 9 位。因为格式是'%i',所以我添加了一个显式转换为int. 有关完整详细信息,请参见此处:http: //docs.python.org/2/library/stdtypes.html#string-formatting-operations

最后,这是一个单行版本(除了with声明,你当然应该保留它):

namelist.write("\n".join("KPLR%09i-2009131105131"%int(line.split()[0]) for line in file_P))
于 2013-07-11T15:58:33.730 回答
0

你可以改变这个:

"".join(str(w) for w in nameData)

对此:

",".join(str(w) for w in nameData)

基本上,“,”将用逗号分隔nameData列表中的元素。如果您使用"",那么将没有任何东西可以分隔元素,因此它们会同时出现。您可以更改分隔符以满足您的需要。

于 2013-07-11T15:57:43.153 回答
0

只是为了踢球:

with open('Processed_Data.txt', 'r') as file_P, open('KIC_list.txt', 'w') as namelist:
    nameData = [line.split()[0] for line in file_P]
    namelist.write("\n".join("KPLR00" + str(key) + '-2009131105131' for key in nameData))

我认为这会起作用,但我还没有测试过。您可以通过完全不使用 nameData 来使其更小/更丑,而只需在其位置使用该列表理解即可。

于 2013-07-11T16:07:25.647 回答