【问题标题】:Pandas to_csv raising IOError: No such file or directoryPandas to_csv 引发 IOError:没有这样的文件或目录
【发布时间】:2021-09-02 09:57:18
【问题描述】:

我正在像这样将df 写入csv。

table = driver.find_element_by_xpath('//table[@class="table-main detail-odds sortable"]').get_attribute('outerHTML')
df = pd.read_html(table)[0]
row_drop = df[df['Bookmakers'].str.contains("Highest", na=False)].index.tolist()
df = df.iloc[:row_drop[0]+1]
df.insert(0,'Name', f'{name}')
df.insert(1,'Date', f'{date}')
df.insert(2,'Result',f'{result}')
df[['Name', 'Date', 'Result']] = df[['Name', 'Date','Result']].mask(df.duplicated(subset=['Name', 'Date', 'Result']), '')
fullname =f'{name}.csv'
outdir = './Tennis'
if not os.path.exists(outdir):
    os.mkdir(outdir)
fullname = os.path.join(outdir, fullname)
df.to_csv(fullname, index=False)

但是,它写入了 10 个文件,然后抛出了这个错误

FileNotFoundError: [Errno 2] 没有这样的文件或目录: './Tennis\El Allami F-Z./Mecchi C. - Perrin C./Shrivastava A.csv'

没有什么是明智的改变刮。我尝试了建议的其他方法

from pathlib import Path

output_file = 'my_file.csv'
output_dir = Path('long_path/to/my_dir')

output_dir.mkdir(parents=True, exist_ok=True)

df.to_csv(output_dir / output_file)  # can join path elements with / operator

这将exist_ok 提供为unexpected_argument。在删除这个..我得到同样的错误。这是哪里出了问题?

info :- 10 是第一页上的链接数。每页获取 1 个 csv。因此,驱动程序打开另一个页面,其中包含另一个设置链接,但在第一个链接上失败。我不知道这与它有什么关系。

【问题讨论】:

  • 这是唯一一个文件名中包含/ 的文件(或第一个文件程序遇到的)吗?我的猜测是它试图在./Tennis\El Allami F-Z./Mecchi C. - Perrin C./ 文件夹中创建一个名为Shrivastava A.csv 的文件,而代码表明文件名是El Allami F-Z./Mecchi C. - Perrin C./Shrivastava A.csv
  • 它只是写入一个名为 Tennis 的文件夹。El Allami F-Z./Mecchi C. - Perrin C./Shrivastava A. 实际上是网站上匹配的名称......我想就是这样。

标签: python pandas web-scraping


【解决方案1】:

路径fullname 中可能包含不存在的目录。确保使用 os.makedirs:

创建中间目录
fullname =f'{name}.csv'
outdir = './Tennis'
filepath = os.path.join(outdir, fullname)
# Create the full directory tree, if needed:
os.makedirs(os.path.dirname(filepath), exist_ok=True)

df.to_csv(filepath, index=False)

【讨论】:

  • @dm2 是对的。 t1 = name.replace('/', '') t1 = t1.replace('.', '') ..这解决了它。
  • 是的,我的解决方案似乎是满足您的另一个需求。我假设您想保留原始文件层次结构。
  • 我不知道比赛名称中有这些字符。否则,简单的 df.to_csv(f'/tennis/{name}.csv) 工作正常。
  • 您的错误表明您在name 中有带有/s 的实例,因此它试图访问一个不存在的文件夹。 (El Allami F-Z./Mecchi C. - Perrin C./ 在您的示例错误中)。这也是为什么按照 dm2 的建议删除 /s 也有效的原因。它将在 C:/tennis 中创建 csv 文件,而在详尽的名称中没有 /。这取决于你需要什么。
  • 另外,exist_okos.makedirs 方法的参数,而不是os.mkdir
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
相关资源
最近更新 更多