gpt4 book ai didi

python - 编辑 csv 以按特定顺序显示 5 列,同时将格式应用于日期时间字段

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:46 27 4
gpt4 key购买 nike

我有 130 个 excel 文件,全部名为 cplt.csv,每个文件都存储在 BM 文件夹下的两个子文件夹下。即 BM/1/1/cplt.csv BM/2/2/cplt.csv 等

我需要读取每个 csv 文件并将其从 7 列更改为 5 列。我需要列的顺序是第七、第三、第二、第一和第六。

第一列是日期时间字段,当前看起来像 8/22/2015 1:19:01 AM我需要它看起来像这样 -> 22-Aug-2015 01.19.01 或遵循 ISO 格式(“yyyy-MM-dd'T'HH:mm:ssZ”)。

我认为有两个问题,1) 我目前无法访问 BM 文件夹下的所有 cplt.csv 文件。2) 我不知道如何将日期时间更改为我需要的 ISO 格式并将其输出回同一个 csv 文件。

我目前得到的代码如下:

import sys, argparse, csv, os

for file in os.listdir("BM"):
if file.endswith(".csv"):
with open(file, 'rb') as csvfile:
for line in csvfile.readlines():
array = line.split(',')
newline = array[6] + "," + array[2] + "," + array[1] + "," + array[0] + "," + array[5]

最佳答案

迭代每个目录并对每个文件运行此函数,datetime.strptime 将解析您的日期并转换为 isoformatitemgetter 提取您想要保留的任何列,我们使用 NamedTemporaryFile 写入新内容后,我们用 shutil.move 替换原始文件:

def change_file(in_file,cols):
with open(in_file) as f, NamedTemporaryFile("w", dir=".", delete=False) as tmp:
r = csv.reader(f)
wr = csv.writer(tmp)
for row in r:
new = [datetime.strptime(dt, "%m/%d/%Y %H:%M:%S %p").isoformat() for dt in itemgetter(*cols)(row)]
wr.writerow(new)
move(tmp.name, in_file)

现在要查找嵌套在子目录中的 csv 文件,我们可以使用 pathlib :

from pathlib import Path
for fle in Path('./BM').glob('**/*.cplt.csv '):
change_file(str(fle), (7, 3, 2, 1, 6))

使用相同的结构和几个测试文件:

In [41]: ls
BM/ test.py

In [35]: ls BM
1/ 2/

In [36]: ls BM/2/
2/

In [37]: ls BM/2/2/
file2.csv

In [38]: cat BM/2/2/file2.csv
8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM
8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM,8/22/2015 1:19:01 AM

In [39]: for fle in Path('./BM').glob('**/*.csv'):
print(str(fle))
change_file(str(fle), (7, 3, 2, 1, 6))
....:
BM/2/2/file2.csv
BM/1/1/file1.csv

In [40]: cat BM/2/2/file2.csv
2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01
2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01,2015-08-22T01:19:01

关于python - 编辑 csv 以按特定顺序显示 5 列,同时将格式应用于日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com