. , , и сохраняя его в PY-файле, чтобы использовать данные для построения графика после сохранения всех данных в разных файлах. , .
. , , Я хотел бы хранить только "2345678 @ abcdef" и "365" в новом файле Python. , .
Вы уверены, что хотите сохранить данные в файле Python? Предполагается, что файлы Python содержат код Python, и они должны быть исполняемыми интерпретатором Python. Было бы лучше сохранить ваши данные в файле типа данных (скажем, preprocessed_data.csv
).
Чтобы получить список файлов, соответствующих шаблону, вы можете использовать встроенную в Python glob
библиотеку .
Вот пример того, как вы можете прочитать несколько CSV-файлов в каталоге и извлечь нужные столбцы из каждого:
import glob
# indices of columns you want to preserve
desired_columns = [1, 4]
# change this to the directory that holds your data files
csv_directory = '/path/to/csv/files/*.csv'
# iterate over files holding data
extracted_data = []
for file_name in glob.glob(csv_directory):
with open(file_name, 'r') as data_file:
while True:
line = data_file.readline()
# stop at the end of the file
if len(line) == 0:
break
# splits the line by whitespace
tokens = line.split()
# only grab the columns we care about
desired_data = [tokens[i] for i in desired_columns]
extracted_data.append(desired_data)
Было бы легко записать извлеченные данные в новый файл. В следующем примере показано, как можно сохранить данные в CSV-файле.
output_string = ''
for row in extracted_data:
output_string += ','.join(row) + '\n'
with open('./preprocessed_data.csv', 'w') as csv_file:
csv_file.write(output_string)
Edit:
Если вы не хотите объединять все CSV-файлы, вот версия, которая может обрабатывать по одному:
def process_file(input_path, output_path, selected_columns):
extracted_data = []
with open(input_path, 'r') as in_file:
while True:
line = in_file.readline()
if len(line) == 0: break
tokens = line.split()
extracted_data.append([tokens[i] for i in selected_columns])
output_string = ''
for row in extracted_data:
output_string += ','.join(row) + '\n'
with open(output_path, 'w') as out_file:
out_file.write(output_string)
# whenever you need to process a file:
process_file(
'/path/to/input.csv',
'/path/to/processed/output.csv',
[1, 4])
# if you want to process every file in a directory:
target_directory = '/path/to/my/files/*.csv'
for file in glob.glob(target_directory):
process_file(file, file + '.out', [1, 4])
Редактировать 2:
Следующий пример обработает каждый файл в каталоге и запишет результаты в выходной файл с аналогичным именем в другом каталоге:
import os
import glob
input_directory = '/path/to/my/files/*.csv'
output_directory = '/path/to/output'
for file in glob.glob(input_directory):
file_name = os.path.basename(file) + '.out'
out_file = os.path.join(output_directory, file_name)
process_file(file, out_file, [1, 4])
Если вы хотите добавить заголовки к выводу, тогда process_file
можно изменить следующим образом:
def process_file(input_path, output_path, selected_columns, column_headers=[]):
extracted_data = []
with open(input_path, 'r') as in_file:
while True:
line = in_file.readline()
if len(line) == 0: break
tokens = line.split()
extracted_data.append([tokens[i] for i in selected_columns])
output_string = ','.join(column_headers) + '\n'
for row in extracted_data:
output_string += ','.join(row) + '\n'
with open(output_path, 'w') as out_file:
out_file.write(output_string)