【问题标题】:cannot write file with full path in Python无法在 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'

提前致谢, 林

【问题讨论】:

    标签: python file csv pandas


    【解决方案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'来写,你认为是权限问题吗?
    • 那个,或者你实际上并没有以写入模式打开输出文件。
    猜你喜欢
    • 1970-01-01
    • 2021-07-18
    • 2014-09-26
    • 2013-07-17
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多