因此,我已经搜索并找到了某些可以帮助我将这段代码组合在一起的东西,但是最后一部分我没有任何运气。我想做的是读取一个逗号分隔,空格分隔或制表符分隔的文件,将标头设置为键,将数据设置为值,然后仅将某些列(列数未知)写入输出中文件。 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中的字典将任意数量的列写入输出文件?
答案 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到列列表的长度。