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 đườngMô-đ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) 0import 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à filenamesimport 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 đườngPathlib 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) 9Ví 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 |