从列表中读取csv文件名并在脚本中使用它们

时间:2019-07-11 15:16:28

标签: python csv ipython filenames

我有一个包含csv文件的文件夹,其中每个文件在开头都有一个字符串来标识游戏,在结尾有一个标签来标识该游戏的哪个表。示例:

20020905_nyg_scoring.csv
20020905_nyg_team_stats.csv
20020908_buf_scoring.csv
20020908_buf_team_stats.csv

我编写了一个脚本,该脚本将文件名的第一部分的csv文件配对为字典,然后将该字典转换为列表。我想读取文件名对,并一起对每个对执行数据帧整形。最终,我将配对文件中的数据合并到单个数据帧中(concat在这里不是我的问题)。

import numpy as np
import pandas as pd
import os

game_list = {}
path = r'C:\Users\jobon\Documents\New NFL Stats\Experimental\2002 Game Logs'
for file in os.listdir(path):
    game_pairing = game_list.get(file[:12],[])
    game_pairing.append(file)
    game_list[file[:12]] = game_pairing

game_pairs = []
for game, stats in game_list.items():
    game_pairs.append(stats)

for scoring, team_stats in game_pairs:
    for file in os.listdir(path):
        df1 = pd.read_csv(scoring, header = 0, index_col = 0)
        df1.drop(['Detail', 'Quarter', 'Time', 'Tm'], axis = 1, inplace = True)
        ...more shaping...

我希望最终可以从我可以连接的每对游戏文件中生成最后一组数据帧。

反而我得到

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-37-fb1d4aa9f003> in <module>
     18 for scoring, team_stats in game_pairs:
     19     for file in os.listdir(path):
---> 20         df1 = pd.read_csv(scoring, header = 0, index_col = 0)
     21         #df1.drop(['Detail', 'Quarter', 'Time', 'Tm'], axis = 1, inplace = True)
     22         print(df1)

FileNotFoundError: [Errno 2] File b'20020905_nyg_scoring.csv' does not exist: b'20020905_nyg_scoring.csv'

文件位于文件夹中,并且可以用于构建列表,但是我不知道为什么突然之间现在找不到文件。

2 个答案:

答案 0 :(得分:0)

好像您在read_csv方法中传递的第一个变量不是字符串文字,而是字节文字。这就是为什么该错误提到文件b'20020905_nyg_scoring.csv'而不是'20020905_nyg_scoring.csv'的原因。开头的b表示字节文字。

更改

df1 = pd.read_csv(scoring, header = 0, index_col = 0)

df1 = pd.read_csv(scoring.decode("utf-8"), header = 0, index_col = 0)

应该解决您的问题

答案 1 :(得分:0)

我刚刚运行了您的代码。我认为问题在于您的.csv文件位于文件夹path中,因此,如果仅使用文件名scoring而没有目录名path,则找不到文件。要解决此问题,您需要

scoring = os.path.join(path, scoring)

在您的循环中。