一次性将多个 .csv 文件导出为 .txt 文件

Export multiple .csv files into .txt files in one go

我有多个具有不同名称的 .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. 删除 header 行,即日期时间|符号|打开.....
  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)

上面的代码工作得很好,但是它一次 creating/converting 一个文件,我的问题是上面的代码我一次只能转换一个文件,我有 500 多个文件必须每天更新。

有没有什么方法或代码可以将我所有的 .csv 文件转换为具有所需格式的文本文件(如上面的代码所述)

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

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

这里的代码完全按照我之前 中的建议执行。
它利用 built-in 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.