Hợp nhất các tệp python thành một

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

  1. Cài đặt 'Aspose. Từ cho Python thông qua. BỌC LƯỚI'
  2. Thêm tham chiếu thư viện [nhập thư viện] vào dự án Python của bạn
  3. Mở tệp nguồn bằng Python
  4. Hợp nhất các tập tin thành một
  5. 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
  6. 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

  1. Nhập các thư viện chúng tôi cần
  2. 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
  3. Tạo một cột mới cho tên tệp
  4. Tạo một cột mới cho ngày trích xuất từ ​​tên tệp
  5. 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
  6. 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ơn

Dướ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

  1. Nhập thư viện
  2. 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'
  3. Đị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
  4. Tạo một cột mới cho tên tệp
  5. Đặ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
  6. 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 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']
0,
# 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']
1] 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…

pip install glob
0

8. 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

Làm cách nào để hợp nhất tất cả các tệp txt trong một thư mục thành một python?

sử dụng "mèo *. txt > tất cả

Làm cách nào để hợp nhất các tệp CSV lớn thành một tệp bằng python?

Cách kết hợp nhiều tệp CSV bằng Python để phân tích .
Nhập tệp vào DataFrames của gấu trúc. .
Thiết lập thư mục làm việc. .
Kết hợp nhiều tệp với cấu trúc bảng tương tự bằng gấu trúc. Khung dữ liệu. nối thêm [].
Kết hợp nhiều tệp với cấu trúc bảng tương tự bằng gấu trúc. concat[]

Làm cách nào để hợp nhất hai tệp HTML trong python?

Cách hợp nhất tệp HTML qua Python .
Mở tài liệu đầu tiên
Mở tài liệu thứ hai
Thêm các trang của tài liệu thứ hai vào tài liệu đầu tiên
Lưu tệp đầu ra được nối

Chủ Đề