使用Python打开csv文件时的IO错误: 无效模式('r')或文件名"['C:\\\\bigdata

1 投票
2 回答
3790 浏览
提问于 2025-04-18 12:37

当我想打开一个csv文件并导入到我的sqlite数据库时,

这是我的代码:

import os
import csv
import sqlite3
import string

connection = sqlite3.connect('nba.db')
cursor = connection.cursor()
officialbatch_file = []

for dirPath, dirNames, PlayoffsfileNames in os.walk('C:\\bigdata_nba\\rawdata\\teamgamelogbatch'):
    for f in PlayoffsfileNames:
        officialbatch_file.append(os.path.join(dirPath, f))
        csvfile = open(str(officialbatch_file),'r')
        creader = csv.reader(csvfile, delimiter=',',quotechar='"')

        new_f = f[:15]
        cursor.execute('DROP TABLE IF EXISTS '+str(new_f))
        cursor.execute('CREATE TABLE '+str(new_f)+'(Team_ID text, Game_ID text, GAME_DATE , YEAR date,TEAM text, MATCHUP text,RIVAL_TEAM text, WL text, MIN integer, FGM integer, FGA integer, FG_PCT integer, FG3M integer, FG3A integer, FG3_PCT integer, FTM integer, FTA integer, FT_PCT integer, OREB integer, DREB integer, REB integer, AST integer, STL integer, BLK integer, TOV integer, PF integer, PTS integer, VIDEO_AVAILABLE integer)')

        connection.commit()

但是出现了这个错误信息:

Traceback (most recent call last):
  File "C:\Python27\nbadata_script\AlliInOneTeamGameLogRegularSeason.py", line 14, in <module>
    csvfile = open(str(officialbatch_file),'r')
IOError: [Errno 22] invalid mode ('r') or filename: "['C:\\\\bigdata_nba\\\\rawdata\\\\teamgamelogbatch\\\\1610612737\\\\Playoffs\\\\TeamGameLog1987-88Playoffs.csv']"

我现在尝试了很多方法,所以如果能帮我一下,我会很感激!

谢谢!

2 个回答

0

在路径示例中使用正斜杠 "/",比如这样 -->('C:/bigdata_nba/rawdata/teamgamelogbatch'):

2

你正在尝试打开一个列表的字符串版本:

officialbatch_file.append(os.path.join(dirPath, f))
csvfile = open(str(officialbatch_file),'r')

你这里想要的是完整路径,而不是文件名的列表:

fullname = os.path.join(dirPath, f)
officialbatch_file.append(fullname)
csvfile = open(fullname, 'rb')

我假设你还想保留officialbatch_file列表中的文件名。如果不需要的话,可以把所有关于officialbatch_file的内容删掉。

如果你使用的是Python 2,打开CSV文件时应该用二进制模式(比如'rb'),因为csv模块会明确处理行结束符。在Python 3中,可以用open(fullname, 'rb', newline='')来打开。

撰写回答