如何使用列表识别键来打印未知数量的字典键?

时间:2018-10-05 12:39:04

标签: python python-3.x dictionary

因此,我已经搜索并找到了某些可以帮助我将这段代码组合在一起的东西,但是最后一部分我没有任何运气。我想做的是读取一个逗号分隔,空格分隔或制表符分隔的文件,将标头设置为键,将数据设置为值,然后仅将某些列(列数未知)写入输出中文件。 Example.txt如下所示:

col1, col2, col3, col4, col5
1, 11, 21, 31, 41
2, 12, 22, 32, 42
3, 13, 23, 33, 43
4, 14, 24, 34, 44

到目前为止,这是我到目前为止的工作代码。

import csv
import sys

file = sys.argv[1] # name of file is example.txt
columns = sys.argv[2:] # order: col1, col3, col5

with open(file, 'r') as csvfile:
    with open('table.out', 'w') as file_out:
        file.out_write(columns[0] + '\t' + columns[1] + '\t' + columns[2] + '\n')

        reader = csv.DictReader(csvfile)
        for row in reader:
            file_out.write(row[columns[0]] + '\t' + row[columns[1]] + '\t' + row[columns[2]] + '\n') 

结果:

col_1    col_3    col_5
1    21    41
2    22    42
3    23    43
4    24    44

如果列数是固定数,则此代码非常有用,但是要写入的列数可以变化。例如,有时我可能只想抓取col1,col2,而有时我可能想不按特定顺序抓取col2,col3,col4,col5。

所以我的问题是,如何修改以上代码,以便可以使用Python 3.X中的字典将任意数量的列写入输出文件?

2 个答案:

答案 0 :(得分:0)

您可以根据自己的需要进行调整,但是基本上使用join函数将非常有帮助+列表理解。

import csv
import sys

file = sys.argv[1]
columns = sys.argv[2:]

with open(file) as f:
    myread = csv.DictReader(f)
    for row in myread:
        print('\t'.join([row[i] for i in columns]))

答案 1 :(得分:0)

git config --unset credential.helper

所以,我对您的代码做了一些修改。 要编写可变数量的列,您可以使用for语句,该语句从0到列列表的长度。