我正在尝试编写一个Python脚本,其中使用glob来获取文件路径列表,然后通过pd.read_csv()读取它们以生成一个大数据框。该脚本在 Mac 上运行良好。然而,我试图帮助一位同事在他们的 PC 上的 Jupyter Notebook 中运行这个程序,但一直失败。
Mac 脚本很简单。只是:
df = pd.DataFrame()
subfolders = ['sub1', 'sub2', 'sub3']
for sub in subfolders:
for filePath in glob.glob('/server/folder1/folder2/'+sub+'/*/*/*/*/*/*/lastfolder/*output.txt'):
df2 = pd.read_csv(filePath, sep='\t')
df = pd.concat([df, df2])
他们过去运行过类似的脚本,没有任何问题。但是,该路径长度现在大于 >260 个字符,我认为这导致了问题。
对于长路径,Windows 在前面添加了一点(...出于什么原因?),例如: \?\UNC\服务器\共享\目录...
当我尝试读取带有附加“\?\UNC”部分的路径时,它破坏了东西。通常我告诉他们只需将反斜杠更改为正斜杠,但这在这里不起作用(我确信有更好的方法可以做到这一点,但这确实不是我工作的重要部分 - 我是只是想让事情更有效地运行)。
我真的不知道如何处理 Windows,所以每次我尝试帮助他们都是一次冒险。我尝试询问 ChatGPT,它让我找到了这个解决方案:
# Define the UNC path with the long path prefix
long_unc_path = r'\\?\UNC\server\folder1\folder2\'
# Convert the long UNC path to a Path object
new_path = Path(long_unc_path)
df = pd.DataFrame()
subfolders = ['sub1', 'sub2', 'sub3']
for sub in subfolders:
for filePath in glob.glob(new_path+sub+'/*/*/*/*/*/*/lastfolder/*output.txt'):
df2 = pd.read_csv(filePath, sep='\t')
df = pd.concat([df, df2])
但是 long_unc_path 的第一行给了我一个未终止的字符串文字错误。我确信这是一个简单的解决方案,但我不知道它是什么。我们正在使用 Python 3.11。
有人可以帮忙吗?谢谢!
这是因为原始字符串并不像您想象的那样完全原始,它们可能会导致
unterminated string literal
错误。在您的情况下,字符串末尾的最后一个 \
尝试充当转义字符并转义 '
。所以它找不到字符串的结尾并导致问题。如果字符串末尾需要有\
,可以将其定义为普通字符串并将其添加到路径末尾:
long_unc_path = r'\\?\UNC\server\folder1\folder2' +'\\'