Làm cách nào để lặp các tệp trong Python?

Ngay bây giờ tôi phải sao chép dán một tệp trong thư mục sau đó đổi tên nó thành đầu vào. pdf và sau đó thực thi tập lệnh, sau đó đối với tệp mới, hãy thay thế đầu vào. pdf bằng tệp mới và thực thi chương trình, v.v.…

Bây giờ tôi muốn lặp qua tất cả (. pdf) trong một thư mục và thực hiện tác vụ được chỉ định trong một hàm mà không thay đổi tên của tệp và lưu tệp có cùng tên nhưng với. xlsx hoặc. csv

from PyPDF2 import PdfReader
import pandas as pd
import tabula

def main(pdf_file):

    name=''
    full_address=''
    contact_no=''
    email_id=''

    # creating an pdf object  
    # pdf_obj=PdfReader('input.pdf')
    pdf_obj=PdfReader(pdf_file)


    pdf=pdf_obj.getPage(0) #to get the first page of the PDF
    pdf_text=pdf.extractText() # now to get the text from the page

    #print(pdf_text)

    address=pdf_text.split('Contact No.') #spliting the complete text upto the Contact No.
    address=address[0]  #to get the first part of the split
    address=address.split('\n')  #now splitting the address by new lines


    for line in address: # iterating through each line and get the name if any would be there 
        if 'MR.' in line or 'MS.' in line or 'MRS.' in line:
            name+=line+'\n'
            continue
        full_address+=line+'\n'


    lines=pdf_text.split('\n')  #spliting the pdf text by new lines
    # print(pdf_text)
    for line in lines:
        if 'Contact No.' in line:  #taking the line with contact no
            contact_no=line.split('Contact No.:')[-1].strip() 
        if 'Email Id' in line:     #taking the line with email id
            email_id=line.split('Email Id:')[-1].split()[3]
            # print(line)


    print('**************')

    lines=pdf_text.split('Lien in Favour of')[-1]  #spliting the oage text and taking 2nd part

    lines=lines.split('\n') # now taking lines as a list by splitting for newlines
    # for line in lines:
    #     print(line)

    # replacing unnecessary characters 
    booking_id=lines[0].replace(':','')
    ref_no=lines[1].replace(':','')
    tower=lines[2].replace(':','')
    appart_no=lines[3].replace(':','')
    floor=lines[4].replace(':','')
    super_area=lines[5].replace(':','')

    if 'Applicant Ledger' not in line[7]: #checking if the "Lien in Favour of" is in multiple lines
        lien_favour=lines[6].replace(':','')+'\n'+lines[7]
    else:
        lien_favour=lines[6].replace(':','') 


    # print(name)
    # print(full_address)
    # print(contact_no)
    # print(email_id)
    # print(booking_id)
    # print(ref_no)
    # print(tower)
    # print(appart_no)
    # print(floor)
    # print(super_area)
    # print(lien_favour)

    #storing the data in dictionary format
    data={
    'Name':[name],
    'Full_Address':[full_address],
    'Contact_No':[contact_no],
    'Email_Id':[email_id],
    'Booking_Id':[booking_id],
    'Ref_No':[ref_no],
    'Tower':[tower],
    'Apartment_No.':[appart_no],
    'Floor':[floor],
    'Super_Area':[super_area],
    'Lien_in_Favour_of':[lien_favour],
    }

    df=pd.DataFrame(data) #creating a pandas dataframe
    table = pd.DataFrame(tabula.read_pdf(pdf_file, pages ='all', stream= 'True')[0])
    df_new = pd.concat([df, table],axis = 1)
    df_new.to_excel('data.xlsx',index=False) # saving the data in data.xlsx outout file
    #print(df_new)
    #print(table)
    #print(type(table))
    #print(type(df))

main(pdf_file='input.pdf')

Phải. Vì vậy, bạn đã có main(pdf_file) - bạn đã sẵn sàng để xử lý
một tập tin với một tên tùy ý. Tôi muốn đổi tên main() thành một cái gì đó hơn thế nữa
có ý nghĩa như process_pdf hoặc tương tự

Những gì còn lại là

  • lặp qua tất cả các tệp PDF
  • tính tên tệp đầu ra kết quả là pdf_file nhưng với một
    phần mở rộng khác nhau

Bạn có thể lặp qua các tên trong một thư mục với os.listdir, hoặc
nối các tên *.pdf với hàm fnmatch

Bạn có thể sử dụng hàm os.path.splitext để chia tên tệp thành
tiền tố và phần mở rộng. Bạn có thể sử dụng nó để lấy tiền tố của PDF
tên tệp và nối thêm .csv thích hợp hoặc phần mở rộng khác theo
với loại đầu ra bạn đang tạo

Một điều khác bạn có thể muốn xem xét là. sao chép/dán một tập tin
vào một thư mục sử dụng tên tạm thời và chỉ đổi tên thành tên cuối cùng
khi tất cả dữ liệu đã được sao chép vào tệp?

Nếu không phải như vậy, có thể bạn thử xử lý một
tập tin trước khi hoàn thành

Có nhiều cách khác nhau để giải quyết vấn đề đó, nếu đó là một vấn đề. Nhận dạng
giải quyết nó sau khi những thứ khác đã hoạt động

Chúc mừng,
Cameron Simpson cs@cskk. nhận dạng. âu

Python là ngôn ngữ lập trình máy tính dễ học và dễ sử dụng. Nó là một trong những ngôn ngữ lập trình phổ biến nhất hiện có. Trong thời đại kỹ thuật số này, nơi mọi người đang tìm cách tự động hóa doanh nghiệp của họ, Python đang trên đà phát triển

Một trong nhiều điều mà các nhà phát triển Python phải làm đi làm lại nhiều lần là lặp qua các tệp trong một thư mục

Trong bài viết này, chúng tôi sẽ chỉ cho bạn một vài cách khác nhau để lặp for từng tệp trong một thư mục, cả khi có và không nhập gói bổ sung

nội dung

Lặp lại các tệp trong một thư mục nhất định bằng os. con đường

Mô-đun os cung cấp một giao diện thống nhất cho nhiều tính năng phổ biến của hệ điều hành trong các nền tảng khác nhau

Tùy thuộc vào nền tảng mà chương trình đang chạy, mô-đun os có thể tự động tải triển khai phù hợp (cho dù đó là posix hoặc nt ) và thực hiện lệnh gọi hệ thống phù hợp

os được đóng gói như một phần của gói tiêu chuẩn Python, vì vậy việc sử dụng nó sẽ giảm bớt sự phụ thuộc của bạn rất nhiều. Dưới đây là một đoạn mã nhỏ nơi chúng tôi lặp qua các tệp trong một thư mục nhất định và in tên của chúng bằng cách sử dụng

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
0

import os for filename in os.listdir('/home/linuxpip'): if filename.endswith(".py"): print(filename) else: continue

Code language: PHP (php)

Ngoài ra, bạn có thể sử dụng

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
1 để lặp qua các tệp trong một thư mục. Chỉ cần nhớ rằng hàm

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
1 trả về 3-tuple, bao gồm dirpath, dirnames và filenames

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)

Lặp lại các tệp trong một thư mục nhất định bằng pathlib

đường dẫn (Python 3. 4+) là cách mới hơn để tương tác với hệ thống tệp theo cách thống nhất

Tại sao

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
3 khi bạn đã có os, bạn có thể hỏi. Vấn đề là os coi các đường dẫn là các chuỗi, vì vậy bạn không thể biết thêm bất kỳ chi tiết nào về một đường dẫn cụ thể trừ khi viết thêm một vài dòng mã. Bên cạnh đó, mô-đun os không cho phép bạn tìm các đường dẫn khớp với một mẫu nhất định bên trong một hệ thống phân cấp nguyên bản. Ngoài ra,

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
3 cung cấp rất nhiều cách tiếp cận hợp lý hơn để quản lý và tương tác với các đường dẫn hệ thống tệp trên các hệ điều hành khác nhau

Để lặp qua các tệp trong một thư mục nhất định, bạn chỉ cần sử dụng

________số 8_______

Trên phiên bản Python cũ hơn, kể cả Python 2, bạn vẫn có thể sử dụng pathlib bằng cách cài đặt nó với pip

pathlib so với hệ điều hành. con đường

Pathlib có cú pháp trực quan hơn, trong khi tôi cảm thấy

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9 cũ kỹ và lộn xộn vào những thời điểm nhất định. Đối tượng Pathlib có thể tự thực hiện các hoạt động của hệ thống tệp bằng cách gọi các phương thức bên trong của nó, trong khi bạn cần gọi một loạt các hàm

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9 khác nhau để thực hiện điều tương tự. Pathlib cho phép bạn dễ dàng duyệt qua các đường dẫn bằng hàm

from pathlib import Path my_dir = Path("/home/linuxpip") for path in dir.iterdir(): print(path)

Code language: JavaScript (javascript)
1. Trong khi đó,

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9 phải dựa vào tên thư mục và chuỗi đường dẫn. Trên hết, Pathlib cho phép bạn lặp lại trên các thư mục và thực hiện khớp mẫu nguyên bản khi

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9 không. Cuối cùng, mỗi đối tượng

from pathlib import Path my_dir = Path("/home/linuxpip") for path in dir.iterdir(): print(path)

Code language: JavaScript (javascript)
4 của pathlib có nhiều phương thức và thuộc tính hữu ích có thể được sử dụng để thực hiện các hoạt động của hệ thống tệp hoặc nhận các thuộc tính mà bạn phải sử dụng các thư viện bổ sung như

from pathlib import Path my_dir = Path("/home/linuxpip") for path in dir.iterdir(): print(path)

Code language: JavaScript (javascript)
5 hoặc

from pathlib import Path my_dir = Path("/home/linuxpip") for path in dir.iterdir(): print(path)

Code language: JavaScript (javascript)
6 cùng với

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9

Ví dụ: tham gia các đường dẫn trong

import os if __name__ == "__main__": for (root, dirs, files) in os.walk('/home/linuxpip', topdown=True): print("The files are: ") print(files)

Code language: PHP (php)
9 phải là

os.path.join(os.getcwd(), "processed_data", "output.xlsx")

Code language: Python (python)

Với Pathlib, bạn chỉ cần sử dụng / toán tử để nối các đường dẫn. Một bước đột phá thực sự nâng cao khả năng đọc mã

os.path.join(os.getcwd(), "processed_data", "output.xlsx")

Code language: CSS (css)

Chúng tôi hy vọng rằng bài viết đã giúp bạn biết cách lặp qua các tệp trong một thư mục một cách hiệu quả. Chúng tôi cũng đã viết một vài hướng dẫn khác để sửa các lỗi phổ biến của Python, chẳng hạn như Hết thời gian chờ trong các yêu cầu Python, Nhập chưa được giải quyết của Python trong VSCode hoặc “Lỗi chỉ mục. Liệt kê chỉ mục ngoài phạm vi” trong Python. Nếu bạn có bất cứ đề nghị, xin vui lòng để lại một bình luận dưới đây