pathlib iterdir()问题

时间:2018-10-19 01:52:31

标签: python pathlib

对于我的项目,我从文本文件中读取了一行输入,内容为“ DC:/ Test / Project1”。 D表示将打印目录中的文件,而忽略子目录。 “ R”表示在目录和每个子目录中打印文件。具体目录后跟一个空格。该目录包含一些python文件。

import os
from pathlib import Path

infile = open("input.txt", "r")


def subfolder(p):
    contents = p.iterdir()
    for i in contents:
        if i.is_file(): 
            print(i)
        elif i.is_dir():
            subfolder(i)        

for line in infile:
    if line[0] == "R":
        p = Path(str(line[2:]))
        contents = p.iterdir()
        for i in contents:
            print(i)
            if i.is_file():
                print(i)
            elif i.is_dir():
                subfolder(i)
    elif line[0] == "D":
         p = Path(str(line[2:]))
         contents = p.iterdir()
         for i in contents:
             print(i)
             if i.is_file():
                 print(i)
    else:
         print("ERROR")

infile.close()

运行此代码时,收到错误消息

Traceback (most recent call last):
  File "C:\Users\jmelu\AppData\Local\Programs\Python\Python36-32\Project 1.py", line 32, in <module>
    for i in contents:
  File "C:\Users\jmelu\AppData\Local\Programs\Python\Python36-32\lib\pathlib.py", line 1059, in iterdir
    for name in self._accessor.listdir(self):
  File "C:\Users\jmelu\AppData\Local\Programs\Python\Python36-32\lib\pathlib.py", line 387, in wrapped
    return strfunc(str(pathobj), *args)
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\\Test\\Project1\n'

以前,相同的代码早就可以使用,并且也可以在其他计算机上使用。我尝试重新安装pathlib,但没有成功。我正在使用python 3.6.2。

1 个答案:

答案 0 :(得分:0)

您正在从文件中读取每行路径的路径,但是您没有从每个字符串中去除换行符,因此您正在寻找包含换行符\n的文件。如您的错误消息所述,无效路径为:

'C:\\Test\\Project1\n' <-- Single slash followed by n; directories are double slash separated

阅读时将其剥离,就可以了:

for line in infile:
    line = line.rstrip("\r\n")  # Removes all trailing carriage returns and newlines
    if line[0] == "R":