簡體   English   中英

遍歷文件夾中的多個文件

[英]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 的paathlibscandir ,並直接從那里訪問路徑:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM