【问题标题】:Python WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect:Python WindowsError:[错误 123] 文件名、目录名或卷标语法不正确:
【发布时间】:2015-11-09 21:29:32
【问题描述】:

我是编程新手,这实际上是我的第一个编码工作任务。我下面的代码抛出错误:

WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect.

我无法找到问题所在。

import os

folders = ["pdcom1", "pdcom1reg", "pdcomopen"]


for folder in folders:
    path = r'"C:\Apps\CorVu\DATA\Reports\AlliD\Monthly Commission Reports\Output\pdcom1"'
    for file in os.listdir(path):
        print file

【问题讨论】:

  • 您使用单引号和双引号。这可能是个问题!
  • 好吧,就是这样!谢谢你。已添加外部单引号使用不同的解决方案,我想我忘了删除它们。
  • 调试提示:确保您提供给看似行为不端的函数的数据是正确的。一个简单的print(path) 会表明双引号是字符串值的一部分。

标签: python


【解决方案1】:

因为它解决了问题,所以我把它作为答案。

不要使用单引号和双引号,尤其是当您定义一个带有r 前面的原始字符串时。

那么正确的调用是

path = r"C:\Apps\CorVu\DATA\Reports\AlliD\Monthly Commission Reports\Output\pdcom1"

或

path = r'C:\Apps\CorVu\DATA\Reports\AlliD\Monthly Commission Reports\Output\pdcom1'

【讨论】:

  • 在我的情况下,只有从原始字符串转换为普通字符串才有帮助
  • 你有同样的问题吗?在我回答这个问题时,我使用的是 python 2.7。从未尝试过 python 3 的行为是否会有所不同......
  • 我用的是 Python 3,但症状是一样的。我想不清楚是否是同一个问题,因为错误消息非常不具体。
  • 是的。我想我的答案的核心(“不要混合引号的类型”)通常是有效的,但在所有情况下可能还不够。你能识别出禁用我的解决方案的字符吗?如果是的话,那值得单独回答!
【解决方案2】:

我在 Spyder 中工作时遇到了一个相关问题,但问题似乎是转义字符(“\”)和路径名中的“\”之间的关系 这是我的插图和解决方案(注意单 \ 与双 \\ ):

path =   'C:\Users\myUserName\project\subfolder'
path   # 'C:\\Users\\myUserName\\project\subfolder'
os.listdir(path)              # gives windows error
path =   'C:\\Users\\myUserName\\project\\subfolder'
os.listdir(path)              # gives expected behavior

【讨论】:

  • 问题是字符串上的双引号。 OP 已经将字符串转换为原始字符串r"path",所以转义字符不是问题。
  • 我有错误FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\\Users...\\xxx.csv' ' ,我的代码使用os.rename(r'C:Users\...\\xxxx.csv', r'C:\Users\...\xxxx_' + str(current_date) + '.csv') 我该如何解决?
  • 我在 Jupyter 中遇到了类似的问题,只有一些新添加的子目录。让我发疯,但使用 os.chdir 在引用路径之前添加“r”修复了它。 r 是否以某种方式告诉程序它是路径而不是转义字符?
【解决方案3】:

这是一个老问题,但我想在这里提到 Python3 中的 pathlib 库。

如果你写:

from pathlib import Path
path: str = 'C:\\Users\\myUserName\\project\\subfolder'
osDir = Path(path)

或

path: str = "C:\\Users\\myUserName\\project\\subfolder"
osDir = Path(path)

osDir 将是相同的结果。

如果你把它写成:

path: str = "subfolder"
osDir = Path(path)
absolutePath: str = str(Path.absolute(osDir))

你会得到绝对目录

'C:\\Users\\myUserName\\project\\subfolder'

您可以查看更多 pathlib 库here。

【讨论】:

    【解决方案4】:

    我在使用 Jupyter 时遇到了类似的问题。 我试图使用shutil的复制功能将文件从一个目录复制到另一个目录。 问题是我忘了导入包。(傻)但是python没有给出导入错误,而是给出了这个错误。

    通过添加解决:

    from shutil import copy
    

    【讨论】:

      【解决方案5】:

      我在使用 Django 时遇到了这个问题,这是因为我忘记在后端启动虚拟环境。

      【讨论】:

        【解决方案6】:

        我在使用 Django Rest Framework 时遇到了同样的错误,这与 UI 无关,仍然出现此错误。 我申请了以下解决方案,为我工作。

        • 重新启动机器。
        • 已重新启动虚拟环境。

        【讨论】:

          【解决方案7】:

          在下面执行

          Python manage.py makemigrations

          它会显示丢失的包。

          安装丢失的包并再次运行以下命令以确保没有遗漏任何内容。

          Python manage.py makemigrations

          它将解决您的问题。

          【讨论】:

            【解决方案8】:

            虽然我没有像你的情况那样使用路径,但我遇到了同样的错误。我的问题的解决方案是安装 django-extension 包。

            【讨论】:

              猜你喜欢
              • 2020-04-08
              • 1970-01-01
              • 1970-01-01
              • 2020-06-07
              • 1970-01-01
              • 2017-05-27
              • 1970-01-01
              • 1970-01-01
              • 2020-07-30
              相关资源
              最近更新 更多