如何从其名称的字符串中动态选择一个csv?

时间:2019-09-22 04:25:00

标签: python pandas csv glob

我希望将下载到我的downloads文件夹的csv文件拉入pandas数据框。每次下载时,都会在字符串末尾添加一个数字,因为文件名已在文件夹中。例如,“ transactions(44).csv”位于该文件夹中,下次下载该文件时,其名称为“ transactions(45).csv”。

我已经查看了glob库或使用os库打开了我的下载文件夹中的最新文件。我无法提出解决方案。我在想我需要某种方式连接到下载路径,找到所有csv文件类型,其中包含字符串“ transactions”的文件,并在完整的文件名字符串中获取最大数量的文件。

list(csv.reader(open(path + '/transactions (45).csv'))

我希望这样的path + '/%transactions%' + 'max()' + '.csv'我知道最终答案将完全不同,但是我希望这是有道理的。

2 个答案:

答案 0 :(得分:1)

假设格式为“ transactions (number).csv”,请尝试以下操作:

import os
import numpy as np

files=os.listdir('Downloads/')
tranfiles=[f for f in files if 'transactions' in f]

现在,您的目标文件如下:

target_file=tranfiles[np.argmax([int(t.split('(')[1].split(')')[0]) for t in tranfiles])]

按如下所示读取所需文件:

df=pd.read_csv('Downloads/'+target_file)

答案 1 :(得分:1)

一种选择是使用正则表达式提取数值最大的文件ID,然后构造一个新文件名:

import re
import glob 
last_id = max(int(re.findall(r" \(([0-9]+)\).csv", x)[0]) \
              for x in glob.glob("transactions*.csv"))
name = f'transactions ({last_id}).csv'

或者,找到最新的文件directly by its modification time

请注意,您不应使用CSV阅读器来读取Pandas中的CSV文件。请改用pd.read_csv()