无法在 Python 中写入具有完整路径的文件

Posted

技术标签:

【中文标题】无法在 Python 中写入具有完整路径的文件【英文标题】:cannot write file with full path in Python 【发布时间】:2015-11-08 21:53:21 【问题描述】:

我在 Mac 上使用 Pandas 来读取和写入 CSV 文件,奇怪的是使用完整路径时会出错,而仅使用文件名时却可以正常工作。我在下面的 cmets 中发布了有效和无效的代码,以及详细的错误消息。有人有什么好主意吗?

sourceDf = pd.read_csv(path_to_csv)
sourceDf['nameFull'] = sourceDf['nameFirst'] + ' ' + sourceDf['nameLast']
sourceDf.to_csv('newMaster.csv') # working
sourceDf.to_csv('~/Downloads/newMaster.csv') # not working

Traceback (most recent call last):
  File "/Users/foo/PycharmProjects/DataWranglingTest/CSVTest1.py", line 36, in <module>
    add_full_name(path_to_csv, path_to_new_csv)
  File "/Users/foo/PycharmProjects/DataWranglingTest/CSVTest1.py", line 28, in add_full_name
    sourceDf.to_csv('~/Downloads/newMaster.csv')
  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/frame.py", line 1189, in to_csv
    formatter.save()
  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/format.py", line 1442, in save
    encoding=self.encoding)
  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/common.py", line 2831, in _get_handle
    f = open(path, mode)
IOError: [Errno 2] No such file or directory: '~/Downloads/newMaster.csv'

Tried to use prefix r, but not working,

    path_to_csv = r'~/Downloads/Master.csv'
    path_to_new_csv = r'~/Downloads/Master_new.csv'

  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/frame.py", line 1189, in to_csv
    formatter.save()
  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/format.py", line 1442, in save
    encoding=self.encoding)
  File "/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/common.py", line 2831, in _get_handle
    f = open(path, mode)
IOError: [Errno 2] No such file or directory: '~/Downloads/Master_new.csv'

提前致谢, 林

【问题讨论】:

【参考方案1】:

尝试使用os.path.join()

import os
(...)
output_filename = 'newMaster.csv'
output_path = os.path.join('Downloads', output_filename)
(...)
sourceDf.to_csv(output_path)

使用相同的方法将pandas.read_csv() 指向正确的方向。

【讨论】:

试过了,path_to_csv = os.path.join("Downloads", "Master.csv") path_to_new_csv = os.path.join("Downloads", "Master_new.csv"),遇到了错误信息,self._engine = CParserWrapper(self.f, **self.options) File "pandas/parser.pyx", line 350, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3173) File " pandas/parser.pyx”,第 594 行,在 pandas.parser.TextReader._setup_parser_source (pandas/parser.c:5912) IOError: File Downloads/Master.csv 不存在 我不熟悉 OSX 路径约定。试试 os.path.join('~', 'Downloads', etc) ? 不起作用。 :( 似乎完整的路径名有效(意味着没有像'~'这样的缩写)。【参考方案2】:

您没有指定 python 版本。 在 3.4 上可以使用 pathlib,否则使用 os.path.join() 或引用:

sourceDf.to_csv(r'~/Downloads/newMaster.csv')

注意 r。 问题是 /n 是换行符,在路径中是不允许的。

【讨论】:

试过但没用,我已经在我的原始帖子中发布了我的错误消息,如果你能帮忙看一下,我将不胜感激。谢谢。 试一试os.path.join,如果这也不起作用,请确保该文件确实存在并且python可以访问(读取访问权限)它将是os.path.join("~", "Downloads", "newMaster.csv") 很奇怪我可以用'~/Downloads/Master.csv'来读,但是不能用'~/Downloads/Master_new.csv'来写,你认为是权限问题吗? 那个,或者你实际上并没有以写入模式打开输出文件。

以上是关于无法在 Python 中写入具有完整路径的文件的主要内容,如果未能解决你的问题,请参考以下文章

python测试mysql写入性能完整实例

情节提要:删除派生数据中的文件夹后仍然“无法写入路径”

“无法将图像数据写入路径” - Laravel 图像干预

如何检测文件是不是可在 Ruby 中写入?

Python无法获取文件的完整路径名

在查找窗口标题上写入完整路径