Python Errno13 权限被拒绝

tul*_*osh 1 python csv

当尝试使用 glob 获取文件名列表和 csv 打开 csv 文件进行字典读取时,我收到权限被拒绝的错误。这是我的代码:

import csv
import glob

#Filepath variable for the CSV files
path = "C:\\Users\\josh\\Data"

for filename in glob.glob(path):
    with open(filename) as csv_file:
        for row in csv.DictReader(csv_file):
            print row
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码运行一些文件打开测试,它工作得很好。所以我知道我可以打开、读取、写入这个文件夹:

open('C:\\Users\\josh\\Data\\testing.txt', 'w').write('this is a test')
open('C:\\Users\\josh\\Data\\03142016.csv')
Run Code Online (Sandbox Code Playgroud)

最后,如果有帮助的话,这是完整的回溯:

Traceback (most recent call last):

  File "<ipython-input-10-49215e5eb704>", line 1, in <module>
    runfile('C:/Users/josh/.spyder2/csvparser2.0.py', wdir='C:/Users/josh/.spyder2')

  File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 580, in runfile
    execfile(filename, namespace)

  File "C:/Users/josh/.spyder2/csvparser2.0.py", line 41, in <module>
    with open(filename) as csv_file:

IOError: [Errno 13] Permission denied: 'C:\\Users\\josh\\Data'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?感谢您的帮助。

Mar*_*oij 6

现在你正在做:

path = "C:\\Users\\josh\\Data"

for filename in glob.glob(path):
Run Code Online (Sandbox Code Playgroud)

glob.glob()在没有任何特殊通配符(*、等)的路径名上将?仅返回该路径名。在这种情况下,目录名称是不允许的,open()因为这没有多大意义。

您可能打算写:

glob.glob(path + '\\*'):
Run Code Online (Sandbox Code Playgroud)

或者:

glob.glob(path + '\\*.csv'):
Run Code Online (Sandbox Code Playgroud)

额外小费

您已经发现使用open('C:\\Users\\josh\\Data\\03142016.csv')效果很好,这是解决问题的良好第一步。您可以通过使用基本的“printf-debugging”找到错误:

path = "C:\\Users\\josh\\Data"

for filename in glob.glob(path):
    print(filename)
    with open(filename) as csv_file:
        [.. trim ..]
Run Code Online (Sandbox Code Playgroud)

这会打印出来C:\\Users\\josh\\Data,而不是C:\\Users\\josh\\Data\\03142016.csv:-)

教训:当有疑问时,print()尽可能多地列出值,并检查它们是否是您所期望的;-)