Присвойте CSV-файлы коллекции словарей (списков) с именами файлов в качестве ключей и содержимым файлов в качестве значений. - PullRequest
0 голосов
/ 02 декабря 2018

У меня проблема с процессом итерации в python, я пытался найти решения, но я думаю, что это сложнее, чем мои возможности (к вашему сведению, я писал код в течение 1 месяца).

Случай:
Допустим, у меня есть 3 CSV-файла (фактическое - 350 файлов), они являются file_1.csv, file_2.csv, file_3.csv.Я сделал итерационный процесс / алгоритм, чтобы создать все имена файлов в одном списке.

каждый csv содержит один столбец с таким количеством строк.
т.е.

#actual cvs much more like this:
# for file_1.csv:
value_1
value_2
value_3

Ниже не приведено фактическое содержимое csv (я имею в виду, что я преобразовал их в массив / серию).)

file_1.csv -> [['value_1'], ['value_2'], ['value_3']]
file_2.csv -> [['value_4'], ['value_5 ']]
file_3.csv -> [[' value_6 ']]

#first step was done, storing csv files name to a list, so it can be read and use in csv function.

filename = ['file_1.csv', 'file_2.csv', 'file_3.csv']

Я хочу получить результат в виде списка:

#assigning a empty list
result = []

Желаемый результат

print (result)

out:
[{'keys': 'file_1', 'values': 'value_1, value_2, value_3'},
{'keys': 'file_2', 'values': 'value_4, value_5'}
{'keys': 'file_3', 'values': 'value_6'}]

См. Выше, что ключи результата больше не содержат ('.csv') в конце имени файла, они все заменены.И обратите внимание, что значения CSV (ранее в виде списка или серии) становятся одной строкой, разделенной запятой.

Любая помощь приветствуется, большое спасибо

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Поскольку кажется, что содержимое файлов уже в значительной степени соответствует формату, в котором вы нуждаетесь (за исключением концов строк), и у вас есть имена из 350 файлов в списке, нет большого объема обработкитебе нужно сделать.Это в основном вопрос чтения содержимого каждого файла и удаления символов новой строки.

Например:

import os

result = []

filenames = ['file_1.csv', 'file_2.csv', 'file_3.csv']

for name in filenames:
    # Set the filename minus extension as 'keys'
    file_data = {'keys': os.path.basename(name).split('.')[0]}
    with open(name) as f:
        # Read the entire file
        contents = f.read()
        # Strip the line endings (and trailing comma), and set as 'values'
        file_data['values'] = contents.replace(os.linesep, ' ').rstrip(',')
    result.append(file_data)

print(result)
0 голосов
/ 02 декабря 2018

Я хотел бы ответить на это в меру своих возможностей (я тоже новичок).

Шаг 1: Чтение этих 350 имен файлов

(если вы не поняли,уже можно использовать модуль glob для этого шага)

Определите каталог, в котором находятся файлы, скажем, 'C: \ Test'

directory = "C:/Test"
import glob
filename = sorted (glob.glob(directory, + "/*.csv"))

Это будет читать все 'Файлы CSV в каталоге.

Шаг 2: Чтение файлов CSV и сопоставление их со словарями

result = []
import os
for file in files:
    filename = str (os.path.basename(file).split('.')[0]) # removes the CSV extension from the filename
    with open (file, 'r') as infile:
        tempvalue = []
        tempdict = {}
        print (filename)
        for line in infile.readlines():
            tempvalue.append(line.strip()) # strips the lines and adds them to a list of temporary values
        value = ",".join(tempvalue)        # converts the temp list to a string
        tempdict[filename] = value         # Assigns the filename as key and the contents as value to a temporary dictionary
        result.append(tempdict)            # Adds the new temp dictionary for each file to the result list
print (result)

Этот фрагмент кода должен работать (хотя может быть кто-то меньший и более питонский кодеще может поделиться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...