一次导出多个csv文件为txt文件



我有多个不同名称的.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

我想为每个。csv文件创建一个新的。txt格式如下:

  1. 删除'symbol'列
  2. 删除标题行即datetime|符号|打开.....
  3. 将'datetime'列日期和时间格式更改为YYYYMMDD
  4. 用";"分隔每一列

期望格式示例如下,以供理解。

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文件转换为所需格式的文本文件(如上所述代码)

下面的代码正是我在前面的评论中建议的。
它利用内置的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.

我不是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)

如果您将路径值替换为您计算机上文件所在目录的实际路径,则此操作应该有效。

最新更新