我尝试使用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
我尝试使用以下代码运行一些文件打开测试,它运行正常。所以我知道我可以打开,阅读,写入这个文件夹:
open('C:\\Users\\josh\\Data\\testing.txt', 'w').write('this is a test')
open('C:\\Users\\josh\\Data\\03142016.csv')
最后,如果有帮助,这里是完整的追溯:
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'
有什么想法吗?谢谢你的帮助。
答案 0 :(得分:4)
现在你正在做:
path = "C:\\Users\\josh\\Data"
for filename in glob.glob(path):
glob.glob()
仅 路径名没有任何特殊的通配符(*
,?
等)将返回该路径名。在这种情况下,目录名称,您不允许open()
,因为它没有多大意义。
您可能打算写:
glob.glob(path + '\\*'):
或:
glob.glob(path + '\\*.csv'):
您已经发现使用open('C:\\Users\\josh\\Data\\03142016.csv')
工作正常,这是解决问题的第一步。您可以通过使用基本&#34; printf-debugging&#34;:
path = "C:\\Users\\josh\\Data"
for filename in glob.glob(path):
print(filename)
with open(filename) as csv_file:
[.. trim ..]
这会打印出C:\\Users\\josh\\Data
,而不是C:\\Users\\josh\\Data\\03142016.csv
: - )
课程:如有疑问,print()
尽可能多地提出价值,并检查它们是否符合您的预期; - )