Thư viện Python cho phép Python thông qua. NET để chuyển đổi Word, PDF và nhiều định dạng tệp khác. Công cụ chuyển đổi mạnh mẽ phân tích bố cục và kiểu của tài liệu gốc, sau đó xuất kết quả kết hợp sang định dạng được yêu cầu
Chuyển đổi tài liệu từ định dạng này sang định dạng khác có thể phức tạp, trừ khi bạn có một công cụ chuyên nghiệp để thực hiện công việc. Sử dụng Python để chuyển đổi Word, PDF, JPG với độ linh hoạt và tốc độ tối đa. Chạy demo trực tuyến và kiểm tra chất lượng chuyển đổi cao nhất ngay trong trình duyệt. API chuyển đổi DOCX hỗ trợ một loạt các tùy chọn hữu ích
Hợp nhất Word, PDF, JPG thành một tệp
Đây là một cách đơn giản để chuyển đổi tài liệu văn phòng từ định dạng này sang định dạng khác trong khi để lại tất cả các chi tiết cấp thấp cho API chuyển đổi. Thư viện Python cho phép Python thông qua. NET để chuyển đổi tài liệu ở nhiều định dạng phổ biến với tính linh hoạt và hiệu quả tối đa
- Phần mềm soạn thảo văn bản. DOCX, DOC, RTF, DOT, DOTM, DOTX, DOCM
- Mở văn phòng. ODT, OTT
- Bố cục cố định. PDF, PostScript, XPS, OpenXPS
- Hình ảnh. PNG, JPG, GIF, BMP, TIFF, SVG, EMF
- mạng. HTML, MHTML
- Người khác. MOBI, EPUB, Xaml, PCL, v.v.
Chuyển đổi nhiều tài liệu và lưu kết quả dưới dạng một tệp dễ dàng. Nếu bạn phát triển mã bằng Python, điều này sẽ đơn giản hơn bạn tưởng. Xem ví dụ về Python lặp qua các tài liệu và kết hợp chúng
Ví dụ mã trong Python để kết hợp nhiều tệp thành một
Sao chép
tập tin đầu vào
Tải lên một tài liệu
Tải lên tệp bạn muốn hợp nhất
Mã vận hành
Tải lên một tài liệu
Tải lên tệp bạn muốn hợp nhất
Định dạng đầu ra
Chọn định dạng đích từ danh sách
import aspose.words as aw
fileNames = [ "Input1.docx", "Input2.docx" ]
output = aw.Document[]
# Remove all content from the destination document before appending.
output.remove_all_children[]
for fileName in fileNames:
input = aw.Document[fileName]
# Append the source document to the end of the destination document.
output.append_document[input, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING]
output.save["Output.pdf"];
Mã vận hành
Bạn có thể tự do sao chép mã này và sử dụng nó trong bất kỳ mục đích áp dụng nào
Cách hợp nhất PDF, Word, JPG và các định dạng tệp khác trong Python
- Cài đặt 'Aspose. Từ cho Python thông qua. BỌC LƯỚI'
- Thêm tham chiếu thư viện [nhập thư viện] vào dự án Python của bạn
- Mở tệp nguồn bằng Python
- Hợp nhất các tập tin thành một
- Gọi phương thức 'append_document[]', chuyển tên tệp đầu ra với phần mở rộng bắt buộc
- Nhận kết quả kết hợp dưới dạng một tệp riêng biệt
Thư viện Python để hợp nhất các tệp
Chúng tôi lưu trữ các gói Python của mình trong kho PyPi. Vui lòng làm theo hướng dẫn từng bước về cách cài đặt "Aspose. Từ cho Python thông qua. NET" vào môi trường nhà phát triển của bạn
yêu cầu hệ thống
Gói này tương thích với Python 3. 5, 3. 6, 3. 7, 3. 8 và 3. 9. Nếu bạn phát triển phần mềm cho Linux, vui lòng xem các yêu cầu bổ sung đối với gcc và libpython trong Tài liệu sản phẩm
Ngừng mở từng cái riêng biệt. Ngừng dán thủ công chúng vào một tệp. Bắt đầu sử dụng Python để tạo một tệp duy nhất, không có lỗi với hướng dẫn này
Ảnh của Firmbee. com trên Unsplash
Một câu chuyện cũ như thời gian. Nhà phân tích đáp ứng dự án phân tích 'đơn giản'. Nhà phân tích nhận thấy dữ liệu trải rộng trên hàng trăm, thậm chí hàng nghìn tệp khác nhau. Nhà phân tích phải đối mặt với sự lựa chọn, làm mọi thứ theo cách dễ dàng hoặc cách khó khăn
Bạn lãng phí bao nhiêu thời gian để nhấp qua từng trong số bốn nhật ký?
Cho dù đó là nhật ký tiến độ hàng ngày, được thu thập qua nhiều năm hoạt động hay báo cáo kiểm tra bao gồm hàng trăm nội dung khác nhau, sẽ luôn có dữ liệu nằm ngoài cơ sở dữ liệu có cấu trúc độc đáo của chúng tôi, chỉ chực chờ khiến chúng tôi phải đau đầu. Một điều chắc chắn là sau khi đọc xong bạn sẽ không phải sao chép và dán từng tệp vào một trang chính. Điều đó không chỉ đẩy bạn xuống mồ sớm, lãng phí thời gian quý báu trong quá trình này mà còn dẫn đến kết quả đầu ra đầy lỗi của con người. Đó là một thua-thua
Ngay cả khi bạn chỉ đọc những nhật ký này cho công việc điều tra, bạn nghĩ bạn dành bao nhiêu thời gian để tải từng tệp? . Bạn cần dữ liệu này ở một nơi, không phải hàng trăm
Nhập trăn. Cụ thể, các thư viện gấu trúc và toàn cầu [tên tuyệt vời]
Tôi sẽ lướt qua một vài ví dụ [một ví dụ đơn giản theo sau là một ví dụ không quá đơn giản] và chia sẻ các tập lệnh mẫu cùng với giải thích về cách chúng hoạt động
Tệp CSV đơn giảnĐối với ví dụ này, giả sử chúng tôi có nhiều tệp CSV được đặt trong cùng một thư mục. Nói chung, chúng có bố cục giống nhau và có tiêu đề cột ở hàng đầu tiên
Đầu tiên, đảm bảo bạn đã cài đặt thư viện toàn cầu, nếu sử dụng Anaconda, hãy nhập thông tin sau vào dấu nhắc Anaconda
pip install glob
Ngoài ra, hãy đảm bảo rằng bạn cũng đã cài đặt gấu trúc [điều này là mặc định với Anaconda]. Bây giờ chỉ cần chỉnh sửa các vị trí thư mục trong tập lệnh bên dưới et voila
# import libraries
import pandas as pd
import glob# define folder directory to look in. Change to xlsx if Excel file.
path =r'folderlocation'
allFiles = glob.glob[path + "/*.csv"]# make a list of all the files in the folder
list_ = []
for file_ in allFiles:
# define sheet name and place data starts
df = pd.read_csv[file_, dtype=str, header=0]
# create a variable with the filename
df['filename']= file_
# extract the date from the filename using string slice
df['date'] = df['filename'].str[-12:-4]# stack each file all on top of the other
list_.append[df]
stack = pd.concat[list_, axis=0]# output to excel or another database
stack.to_csv[r'filepath\filename.csv']
Hãy phá vỡ nó. kịch bản này
- Nhập các thư viện chúng tôi cần
- Cho toàn cầu biết nơi cần tìm và yêu cầu nó đọc tất cả các tệp kết thúc bằng ‘. csv' dưới dạng khung dữ liệu. Nếu bạn muốn tìm một từ cụ thể trong tên tệp, bạn có thể thêm từ đó vào đây
- Tạo một cột mới cho tên tệp
- Tạo một cột mới cho ngày trích xuất từ tên tệp
- Tạo một khung dữ liệu mới có tên là 'ngăn xếp', mỗi khung dữ liệu riêng lẻ xếp chồng lên nhau
- Viết lại tệp kết hợp này dưới dạng tệp csv ở đích bạn đã chọn
Điều này hoạt động hoàn hảo cho các trường hợp mà chúng tôi chỉ muốn mọi thứ có trong mọi tệp csv được kết hợp thành một. Chúng tôi có thể dễ dàng lọc theo ngày hoặc tên tệp sẽ hữu ích cho công việc điều tra nhưng cũng cho phép kiểm tra chất lượng của đầu ra so với tệp thô
Nhưng điều gì xảy ra nếu bạn chỉ muốn trích xuất một số phần của tệp? . Làm thế nào chúng ta có thể đối phó với điều đó một cách hiệu quả?
Xử lý các định dạng phức tạp hơnDưới đây là bản mô phỏng của một 'nhật ký hàng ngày' điển hình mà tôi sẽ chạy một ví dụ từ đầu đến cuối. Đối với bài tập này, tôi đã đánh dấu bằng màu cam những thông tin mà tôi muốn lưu giữ hàng ngày ở định dạng dễ sử dụng hơn
Tôi có hai nhật ký trong hai ngày [hiển thị bên dưới] và sẽ kết hợp chúng và trích xuất thông tin liên quan vào một bảng có cấu trúc gọn gàng. Trước tiên, tôi sẽ hiển thị kết quả cuối cùng của việc kết hợp các tệp này, tập lệnh được sử dụng và sau đó là mô tả chi tiết hơn về cách hoạt động của tập lệnh đó
Nhật ký hàng ngày ví dụ 1 & 2. Các ô màu cam sẽ được trích xuất và định hình lại thành định dạng dễ sử dụng hơn và các tệp được hợp nhất thành một bảng
Đầu ra cuối cùng
Tốt đẹp. Cái này hữu dụng hơn nhiều. Tôi có thể mở tệp này và lọc vào [các] ngày hoặc [các] ca làm việc cụ thể để điều tra mà không cần nhấp qua các báo cáo riêng biệt. Tôi có thể dễ dàng tạo một số phân tích, chẳng hạn như khối lượng sản xuất trung bình và nhóm phân tích này theo ca hoặc tháng. Mặc dù tôi chỉ kết hợp hai tệp, nhưng tập lệnh có thể mở rộng nên hoạt động tốt trên hàng trăm [thậm chí hàng nghìn] tệp. Vì vậy, làm thế nào tôi đến đó?
Nếu chúng ta chạy tập lệnh mẫu đơn giản từ ví dụ trước, chúng ta sẽ nhận được kết quả bên dưới. Tất cả dữ liệu đều hiện diện, nhưng đó là một mớ hỗn độn. Chúng ta cần tạo các tiêu đề cột phù hợp, loại bỏ thông tin không liên quan và xóa khoảng trắng
Đầu ra từ một tập lệnh kết hợp đơn giản. Chúng tôi cần thêm một số hướng dẫn để có được đầu ra mà chúng tôi muốn
Kịch bản
Đó là một đoạn nhỏ, nhưng tôi sẽ giải thích những gì đang xảy ra chi tiết hơn khi chúng ta xem qua
# define folder directory to look in
path =r'folderpath'
allFiles = glob.glob[path + "/*.xlsx"]# make a list of all the files in the folder
list_ = []
for file_ in allFiles:
# define sheet name and place data starts
df = pd.read_excel[file_, sheet_name = 'Sheet1', index_col=None, dtype=str, usecols = "B:F"]
# create a variable with the filename
df['filename']= file_
# set row number as index
df.index = range[len[df]]
### GET SHIFT TIMES
# set index selection based on text
index_start = df[df.iloc[:,0]=='Shift:'].index.values.astype[int][0]
index_finish = df[df.iloc[:,0]=='Next planned shifts:'].index.values.astype[int][0] - 1
# select the data between set indexes
df_shifts = df.query['index > @index_start & index < @index_finish']
### GET DATE
# set index selection based on text
index_start2 = df[df.iloc[:,0]=='Date:'].index.values.astype[int][0]
# select the data between set indexes
df_date = df.query['index == @index_start2']
### GET MANAGER
# set index selection based on text
index_start3 = df[df.iloc[:,0]=='Manager on shift:'].index.values.astype[int][0]
# select the data between set indexes
df_manager = df.query['index == @index_start3']
# merge the data together
df_all = pd.merge[df_shifts, df_date, left_on = ['filename'], right_on = ['filename'], how = 'left']
df_all = pd.merge[df_all, df_manager, left_on = ['filename'], right_on = ['filename'], how = 'left']
# stack all files on top of each other
list_.append[df_all]
log = pd.concat[list_, axis=0]## rename columns
log.rename[columns={log.columns[0]: "Shift", log.columns[1]: "Start", log.columns[2]: "Finish",log.columns[3]: "Production Volume", log.columns[4]: "Notes", log.columns[5]: "filename", log.columns[7]: "Date", log.columns[12]: "Manager on shift" }, inplace=True]# retain only useful columns
log = log[['Date', 'Manager on shift', 'Shift','Start','Finish','Production Volume','Notes','filename']]# write to csv
log.to_csv[r'filepath\combinedlog.csv', index = False]
kịch bản này
- Nhập thư viện
- Cho toàn cầu biết nơi để tìm. Giống như ví dụ đơn giản trước đây, chúng tôi xác định thư mục và lần này tôi đã yêu cầu toàn cầu xem xét. xlsx và cụ thể là trang tính có tên 'Sheet1'
- Định nghĩa cách đọc tệp. Tôi đã đặt usecols = “B. F” như trong các nhật ký này, mẫu được giới hạn trong các ô này, vì vậy tôi sẽ tiết kiệm được một số bước dọn dẹp sau. Tương tự, các phím bỏ qua đầu vào cũng có thể được sử dụng để loại bỏ một số hàng khỏi đầu khi cần thiết
- Tạo một cột mới cho tên tệp
- Đặt số hàng làm chỉ mục tệp bằng cách sử dụng
pip install glob
1. Chúng tôi sẽ sử dụng số này để xác định hàng nào chúng tôi muốn chuyển tiếp vào tệp kết hợp của mình - Chọn số chỉ mục cụ thể để trích xuất, dựa trên kết hợp văn bản
Đây là phần quan trọng vì vậy tôi sẽ giải thích. Nếu có thể, tôi sẽ đặt những ngôi sao lớn sáng bóng xung quanh phần này. Để hình dung những gì đang xảy ra, tôi đã chạy tập lệnh mà chúng tôi có cho đến nay và hiển thị khung dữ liệu bên dưới. Các trường được đánh dấu là các phần từ mẫu mà chúng tôi cần. Chúng ta có thể cho python biết những phần nào cần trích xuất dựa trên vị trí của chúng so với những phần này. Ví dụ: ngày, ở đây là 28/12/2021, sẽ luôn ở cùng một hàng với 'Ngày', vì vậy chúng tôi chắc chắn muốn giữ hàng đó. Điều tương tự đối với 'Người quản lý theo ca'. Đối với “Shift. ”, chúng tôi cần các hàng bên dưới nó, nhưng không quá xa bên dưới vì chúng tôi không quan tâm đến 'Ca làm việc theo kế hoạch tiếp theo' vào lúc này
Sử dụng khớp văn bản trên trường được đánh dấu để lấy số chỉ mục. Ví dụ: Người quản lý trực ca nằm trong hàng được lập chỉ mục là 2
Hãy bắt đầu với hai cái đầu tiên. Để tìm ra những hàng này là gì, chúng tôi sử dụng mã
index_num = df[df.iloc[:,0] == 'Text'.index.values.astype[int][0]
Điều này trả về số chỉ mục của hàng được yêu cầu dưới dạng số nguyên, e. g. tìm kiếm 'Người quản lý theo ca. ' trả về '2', vì vậy chúng tôi muốn chỉ số hàng = 2. Kết hợp điều đó với một truy vấn và chúng tôi có thể gọi trên hàng chính xác đó
df_new = df.query['index == @index_num']
Lặp lại cho “Ngày. ” và xuất thành một khung dữ liệu riêng cho từng cái [ở trên tôi đã sử dụng df_shifts và df_manager]
Một cách tiếp cận tương tự có thể được sử dụng để thu thập thông tin ca làm việc, nhưng vì cách này kéo dài nhiều hàng nên chúng ta cần xác định hàng bắt đầu và hàng kết thúc. Dữ liệu chúng tôi cần bắt đầu trên hàng sau “Shift. ” và kết thúc hai hàng trước “Ca làm việc theo kế hoạch tiếp theo. ”. Đặt các tham số này bằng mã bên dưới
index_start = df[df.iloc[:,0]=='Shift:'].index.values.astype[int][0]
index_finish = df[df.iloc[:,0]=='Next planned shifts:'].index.values.astype[int][0] - 1
Bây giờ, một lần nữa, hãy chạy truy vấn để cô lập các hàng và chúng ta sẽ có tất cả các phần màu cam của nhật ký
df_shifts = df.query['index > @index_start & index < @index_finish']
Lợi ích chính của việc sử dụng đối sánh văn bản để xác định hàng là độ dài của bản ghi có thể thay đổi linh hoạt. Nhật ký hàng ngày 1 chỉ chứa ba ca, nhưng nhật ký 2 chứa bốn ca và ai biết có thể có bao nhiêu ca trong tương lai. Mã hóa cứng các số hàng [e. g. nói rằng luôn thu thập các hàng 5–10] có thể dẫn đến thiếu dữ liệu hoặc nhiều dữ liệu trống/không liên quan khiến cuộc sống của bạn trở nên khó khăn hơn. Mặt khác, nếu tên ô thay đổi [e. g. 'Sự thay đổi. ’ trở thành ‘shift’], thì tập lệnh sẽ cần được chỉnh sửa để tính đến điều này. Một sửa chữa nhanh chóng trong kế hoạch của mọi thứ. Được rồi, quay lại quy trình làm việc của tập lệnh
7. Hợp nhất các phần khác nhau của tệp lại với nhau. Chúng tôi cần đặt ba khung dữ liệu của mình [
pip install glob
2, # import libraries0,
import pandas as pd
import glob# define folder directory to look in. Change to xlsx if Excel file.
path =r'folderlocation'
allFiles = glob.glob[path + "/*.csv"]# make a list of all the files in the folder
list_ = []
for file_ in allFiles:
# define sheet name and place data starts
df = pd.read_csv[file_, dtype=str, header=0]
# create a variable with the filename
df['filename']= file_
# extract the date from the filename using string slice
df['date'] = df['filename'].str[-12:-4]# stack each file all on top of the other
list_.append[df]
stack = pd.concat[list_, axis=0]# output to excel or another database
stack.to_csv[r'filepath\filename.csv']
# import libraries1] lại với nhau. May mắn thay, tất cả họ đều có điểm chung. tên tệp, mà chúng tôi đã đặt làm cột trước đó, mà chúng tôi có thể căn cứ vào việc hợp nhất. Nó gần như là đã được lên kế hoạch…
import pandas as pd
import glob# define folder directory to look in. Change to xlsx if Excel file.
path =r'folderlocation'
allFiles = glob.glob[path + "/*.csv"]# make a list of all the files in the folder
list_ = []
for file_ in allFiles:
# define sheet name and place data starts
df = pd.read_csv[file_, dtype=str, header=0]
# create a variable with the filename
df['filename']= file_
# extract the date from the filename using string slice
df['date'] = df['filename'].str[-12:-4]# stack each file all on top of the other
list_.append[df]
stack = pd.concat[list_, axis=0]# output to excel or another database
stack.to_csv[r'filepath\filename.csv']
pip install glob
08. Tạo một khung dữ liệu mới có tên là 'log', mỗi khung dữ liệu riêng lẻ chồng lên nhau
9. Dọn dẹp bằng cách đổi tên các cột, loại bỏ bất kỳ cột nào chúng tôi không cần và cuối cùng ghi lại vào CSV
Ta-da. Tất cả đã được làm xong. Chúng tôi có thể chạy định kỳ [hoặc nếu chúng tôi cảm thấy thực sự hiệu quả, hãy thiết lập một quy trình để tự động chạy nó cho chúng tôi] và đảm bảo chúng tôi luôn có dữ liệu cập nhật nhất ở một nơi. Nếu có thể, tôi khuyên bạn nên nhập nhật ký kết hợp vào cơ sở dữ liệu như MSSQL, đặc biệt nếu tệp trở thành một tệp lớn, vì nó có thể tải và hoạt động chậm trong Excel
Có nhiều cách để lột da mèo và kết quả tương tự như trên có thể đạt được thông qua một số phương pháp khác nhau. Của tôi hoàn toàn không phải là Pythonic nhất, nhưng bạn biết gì không? . Điều quan trọng là sử dụng logic phù hợp với bạn với tư cách là lập trình viên. Bằng cách đó, nếu các thay đổi được thực hiện đối với tập lệnh mẫu, bạn có thể dễ dàng điều chỉnh tập lệnh cho phù hợp với nó
Tôi hy vọng điều này hữu ích và giúp bạn tiết kiệm thời gian và công sức. Đánh dấu trang này sẵn sàng khi bạn cần