[英]Iterating over a multiple files in a folder
我正在嘗試開發一個可以迭代同一文件夾中不同文件的程序。 這些文件都是相同的格式,但名稱不同。 現在,如果文件夾中只有 1 個文件,則代碼執行沒有問題,但使用不同的文件,我會收到錯誤:
Traceback (most recent call last):
File "D:/Downloads/FYP/Feedback draft.py", line 24, in <module>
wb = openpyxl.load_workbook(filename)
File "C:\Users\shomi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
reader = ExcelReader(filename, read_only, keep_vba,
File "C:\Users\shomi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
self.archive = _validate_archive(fn)
File "C:\Users\shomi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
archive = ZipFile(filename, 'r')
File "C:\Users\shomi\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1251, in __init__
self.fp = io.open(file, filemode)
FileNotFoundError: [Errno 2] No such file or directory: 'tester2.xlsx'
我使用的代碼是:
directory = r'D:\Downloads\FYP\TEST'
for filename in os.listdir(directory):
if filename.endswith(".xlsx"):
wb = openpyxl.load_workbook(filename)
sh1=wb['test']
doc = DocxTemplate('Assignment1feedback.docx')
context = {
'acc': acceleration
}
doc.render(context)
doc.save('D:\\Downloads\\FYP\\TEST\\' + filename + '.docx')
這是不完整的代碼,因為完整的東西會很長,但總的來說我想訪問這些 excel 文件,然后創建相應的 docx
所以os.listdir
僅提供目錄文件的基本名稱,如果您的工作目錄與directory
的值不匹配,則會導致問題。 如果您的工作目錄是D:\Downloads
, ./file.xlsx
不存在,但D:\Downloads\FYP\TEST/file.xlsx
存在。
您將要使用文件的絕對路徑,這里有兩個選項。 您可以按照@IronMan 在他們的評論中的建議從目錄路徑和文件基名生成文件路徑:
import os
directory = r'D:\Downloads\FYP\TEST'
for filename in os.listdir():
wb = openpyxl.load_workbook(os.path.join(directory, filename))
這是一種簡單而有用的方法; 但是,它的功能有些受限,並且可能會使將來更難進行更改。 另一種方法是使用 python 的paathlib
和scandir
,並直接從那里訪問路徑:
import pathlib
directory = r'D:\Downloads\FYP\TEST'
for entry in pathlib.scandir(diectory):
wb = openpyxl.load_workbook(entry.path)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.