【问题标题】:Double backslashes for filepath_or_buffer with pd.read_csv带有 pd.read_csv 的 filepath_or_buffer 的双反斜杠
【发布时间】:2019-01-31 20:57:03
【问题描述】:

Python 3.6,操作系统 Windows 7

我正在尝试使用 pd.read_csv() 使用相对文件路径读取 .txt。因此,从 pd.read_csv() API 检查了 filepath 参数可以是任何有效的字符串路径。

所以,为了定义相对路径,我使用了 pathlib 模块。我已将相对路径定义为:

df_rel_path = pathlib.Path.cwd() / ("folder1") / ("folder2") / ("file.txt")
a = str(df_rel_path)

最后,我只想用它来喂pd.read_csv()

df = pd.read_csv(a, engine = "python", sep = "\s+")

但是,我只是收到一条错误消息,指出“没有这样的文件或目录:...”在文件夹路径上显示双反斜杠。

我尝试使用原始字符串(即使用r"relative/path")在 pd.read_csv() 上手动写入路径。但是,我仍然得到相同的结果,双反斜杠。有什么我忽略的吗?

【问题讨论】:

    标签: python-3.x pandas pathlib


    【解决方案1】:

    你可以使用os模块得到你想要的

    df_rel_path = os.path.abspath(os.path.join(os.getcwd(), "folder1", "folder2"))
    

    这样os 模块将使用适当的分隔符处理连接路径部分。如果您读取同一目录中的文件,则可以省略 os.path.abspath,但为了完整起见,我写了它。

    有关更多信息,请参阅此 SO 问题:Find current directory and file's directory

    【讨论】:

    • 我试过了,结果还是一样。我不明白。我对 subprocess.Popen() 使用相同的理念,它运行良好。
    • 你能发布堆栈跟踪吗?你确定你指向一个正确的位置吗?文件真的存在吗?
    • 嗨@Colonder。你是对的。 file.txt 有问题。问题是我假设文本文件扩展名是("file.txt"),而实际上不是。是("file.out") 尽管如此,我不明白如何使用 .txt 扩展名(当它应该是 .out 时)你最终会在你的路径中出现双反斜杠。感谢您的帮助!
    • 在 Windows 上,您必须使用双反斜杠来转义 \ 符号
    【解决方案2】:

    您需要一个文件名来调用 pd.read_csv。在示例中,“a”只是路径,并不指向特定文件。你可以这样做:

    df_rel_path = pathlib.Path.cwd() / ("folder1") / ("folder2")
    a = str(df_rel_path)
    df = pd.read_csv(a+'/' +'filename.txt')
    

    使用文件名,您的代码适用于我(在 Windows 10 上):

    df_rel_path = pathlib.Path.cwd() / ("folder1") / ("folder2")/ ("file.txt")
    a = str(df_rel_path)
    df = pd.read_csv(a)
    

    【讨论】:

    • 你是完全正确的。没有指定 .txt 文件是我的错误。但是,是的,我将 pd.read_csv() 指向一个 .txt 文件。那我会更正这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 2010-12-14
    • 1970-01-01
    • 2020-11-25
    • 2022-11-28
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多