我有一个来自客户的参与表格目录(作为excel文件),我想编写一个脚本,从参与表格中获取所有相关单元格并将其写入excel doc,其中每个客户端都在其上自己的行。当我尝试使用以下代码遍历目录时:
import os
import xlrd
import xlwt
from xlrd import open_workbook
from xlwt import easyxf
import pandas as pd
from pandas import np
import csv
for i in os.listdir("filepath"):
book=xlrd.open_workbook("filepath",i)
print book
sheet=book.sheet_by_index(0)
a1=sheet.cell_value(rowx=8, colx=3)
print a1
我收到错误:IOError:[Errno 13]权限被拒绝:'filepath'
编辑以下是Steven Rumbalski建议编辑后的完整追溯:
Traceback (most recent call last):
File "C:\Users\Me\Desktop\participation_form.py", line 11, in <module>
book=xlrd.open_workbook(("Y:/Directory1/Directory2/Signup/", i))
File "c:\python27\lib\site-packages\xlrd\__init__.py", line 394, in open_workbook
f = open(filename, "rb")
TypeError: coercing to Unicode: need string or buffer, tuple found
答案 0 :(得分:1)
xlrd.open_workbook
期望它的第一个参数是文件的完整路径。您正在尝试打开文件夹而不是文件。您需要加入文件路径和文件名。做
book = xlrd.open_workbook(os.path.join("filepath", i))
你也想防止尝试打开不是excel文件的东西。您可以将其添加为循环的第一行:
if not i.endswith((".xls", ".xlsx")): continue
答案 1 :(得分:0)
您可以使用pandas中的glob模块和.read_excel()方法(您似乎已经导入)来简化所有这些操作。以下迭代遍历某些目录中与“* .xlsx”匹配的所有文件,将它们解析为数据框,并打印出相应单元格的内容。
from glob import glob
for f in glob("/my/path/to/files/*.xlsx"):
print pd.read_excel(f).ix[8,3]