У меня есть несколько файлов .csv с разными именами, такими как ATUL.csv, ISEC.csv, XYZ.csv и т. д. Каждый файл имеет аналогичный формат данных, упомянутый ниже:
datetime symbol open high low close volume
2005-03-10 09:15:00 NSE:ATUL 85.59 89.00 85.19 86.84 73582
2005-03-11 09:15:00 NSE:ATUL 89.44 89.80 85.50 85.94 153945
2005-03-14 09:15:00 NSE:ATUL 86.90 88.75 84.00 84.65 73539
2005-03-15 09:15:00 NSE:ATUL 85.00 85.94 82.00 82.40 79053
Я хочу создать новый .txt для каждого файла .csv с форматированием, указанным ниже:
Образец желаемого формата приведен ниже для понимания.
20050310;85.59;89.00;85.19;86.84;73582
20050311;89.44;89.80;85.50;85.94;153945
20050314;86.90;88.75;84.00;84.65;73539
20050315;85.00;85.94;82.00;82.40;79053
Я пытаюсь ниже код, чтобы получить свой вывод
import pandas as pd
data = pd.read_csv('ATUL.csv')
data.drop('symbol', inplace=True, axis=1)
data['datetime'] = pd.to_datetime(data['datetime']).dt.strftime('%Y%m%d')
data.to_csv('output.txt', sep=';', header=None, index=False)
Приведенный выше код отлично работает, но он создает/преобразует один файл за раз, моя проблема в том, что вышеприведенный код позволяет конвертировать только один файл за раз, у меня более 500 файлов, которые я должен обновлять ежедневно.
Есть ли способ или код, с помощью которого я мог бы преобразовать все мои файлы .csv в текстовые файлы с желаемым форматированием (как указано выше в коде)
Большое спасибо @martineau, поскольку я очень новичок в python, было бы очень полезно, если бы вы могли уточнить/объяснить код.






Я не эксперт по Python, у меня есть решение вашей проблемы.
Сначала упакуйте все файлы в один каталог, а затем используйте модуль os, чтобы просмотреть его.
РЕДАКТИРОВАТЬ
import os
import pandas as pd
path = "path/to/directory/with/csv"
with os.scandir(path) as it:
for entry in it:
if entry.is_file() and entry.name.endswith(".csv"): # Treat only csv files
# Convert csv to txt with your code here
data = pd.read_csv(entry.name)
data.drop('symbol', inplace=True, axis=1)
data['datetime'] = pd.to_datetime(data['datetime']).dt.strftime('%Y%m%d')
data.to_csv('output.txt', sep=';', header=None, index=False)
Это должно работать, если вы замените значение пути фактическим путем к каталогу с вашими файлами на вашем компьютере.
спасибо за ваши предложения, но это не работает в моем случае
Что за ошибка у вас?
Я не знаю, куда поместить мой код с предложенным вами кодом, мой код импортирует панды как pd data = pd.read_csv('ATUL.csv') data.drop('symbol', inplace=True, axis=1) data[ 'datetime'] = pd.to_datetime(data['datetime']).dt.strftime('%Y%m%d') data.to_csv('output.txt', sep=';', header=None, индекс=ложь)
Я поместил ваш код в свой, чтобы он работал на вас. Теперь вам просто нужно скопировать и вставить этот код и заменить значение пути правильным путем. (например: «C:/user/documents/files_to_convert/» или «.», если ваш файл python находится в том же каталоге, что и ваши файлы csv)
Пожалуйста. Если это работает, не забудьте решить эту проблему.
Вот код, который делает именно то, что я предложил в моем предыдущем комментарий.
Он использует встроенный модуль pathlib для упрощения обработки.
import pandas as pd
from pathlib import Path
def export_csv(input_filepath, output_filepath):
"""Reformat input file and save result to the given output file path."""
data = pd.read_csv(input_filepath)
data.drop('symbol', inplace=True, axis=1)
data['datetime'] = pd.to_datetime(data['datetime']).dt.strftime('%Y%m%d')
data.to_csv(output_filepath, sep=';', header=None, index=False)
folderpath = Path('path/to/csv/files/folder').resolve()
new_suffix = '.txt'
# Convert all .csv files in given folder.
for input_filepath in folderpath.glob('*.csv'):
# Output file path is the same as the input file except it has a different
# extension.
output_filepath = input_filepath.with_suffix(new_suffix)
export_csv(input_filepath, output_filepath) # Convert the file.
Поместите код, который у вас есть, в функцию с двумя параметрами: имена входного и выходного файлов. Напишите цикл, который применяет эту функцию ко всем именам файлов .csv в папке.