我有多个不同名称的.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格式如下:
- 删除'symbol'列
- 删除标题行即datetime|符号|打开.....
- 将'datetime'列日期和时间格式更改为YYYYMMDD
- 用";"分隔每一列
期望格式示例如下,以供理解。
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)
如果您将路径值替换为您计算机上文件所在目录的实际路径,则此操作应该有效。