Как можно распечатать неизвестное количество ключей словаря, используя список для идентификации ключей? - PullRequest
0 голосов
/ 05 октября 2018

Итак, я искал и нашел некоторые вещи, которые помогли мне собрать этот код, но мне не повезло с этой последней частью.Что я хочу сделать, так это прочитать файл, разделенный запятыми, разделенный пробелами или разделенный табуляцией, установить заголовки в качестве ключей и данные в качестве значений, а затем записать только определенные столбцы (количество столбцов неизвестно) в выводфайл.Пример.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 голосов
/ 05 октября 2018
import csv
import sys

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

with open(file, 'r') as csvfile:
    with open('table.out', 'w') as file_out:
        for i in range(0,n_columns):
            file_out.write(columns[i] + '\t')
        file_out.write('\n')

        reader = csv.DictReader(csvfile)
        for row in reader:
            for i in range(0,n_columns):
                file_out.write(row[columns[i]] + '\t')
            file_out.write('\n')

Итак, я немного изменил ваш код.чтобы написать переменное число столбцов, вы можете использовать оператор for, который идет от 0 до длины списка столбцов.

0 голосов
/ 05 октября 2018

Вы можете адаптировать это к вашим потребностям, но в основном использование функции 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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...