समस्या
आप पायथन में कंप्रेस्ड फाइलें बनाना चाहते हैं।
परिचय
ZIP फाइलें कई अन्य फाइलों की कंप्रेस्ड सामग्री को रख सकती हैं। एक फाइल को कंप्रेस करने से डिस्क पर उसका आकार कम हो जाता है, जो इंटरनेट पर ट्रांसफर करते समय या Control-M AFT, कनेक्ट डायरेक्ट, या यहां तक कि scp का उपयोग करके सिस्टम्स के बीच ट्रांसफर करते समय उपयोगी होता है।
पायथन प्रोग्राम zipfile मॉड्यूल में फंक्शन्स का उपयोग करके ZIP फाइलें बनाते हैं।
कैसे करें
1. हम zipfile और io पैकेज का उपयोग करेंगे। अगर आपके सिस्टम पर कोई पैकेज गायब है तो उन्हें pip से इंस्टॉल करें।
2. सैंपल डेटा को फाइल में लिखने के लिए एक फंक्शन लिखें
import io
def write_data_to_files(inp_data, file_name):
"""function: create a csv file with the data passed to this code
args: inp_data: data to be written to the target file
file_name: target file name to store the data
return: none"""
print(f" *** Writing the data to - {file_name}")
throwaway_storage = io.StringIO(inp_data)
with open(file_name, 'w') as f:
for line in throwaway_storage:
f.write(line)
3. ऊपर बनाई गई फाइलों को ज़िप करने के लिए file_compress फंक्शन लिखें
यह फंक्शन फाइलों की सूची स्वीकार करता है, उनके माध्यम से जाता है और उन्हें एक ज़िप फाइल में कंप्रेस करता है।
अपनी खुद की कंप्रेस्ड ZIP फाइलें बनाने के लिए, आपको ZipFile ऑब्जेक्ट को राइट मोड में खोलना होगा, दूसरे आर्गुमेंट के रूप में 'w' पास करके।
जब आप ZipFile ऑब्जेक्ट के write() मेथड में पाथ पास करते हैं, तो पायथन उस पाथ पर फाइल को कंप्रेस करेगा और ZIP फाइल में जोड़ देगा।
write() मेथड का पहला आर्गुमेंट जोड़ने के लिए फाइलनाम की स्ट्रिंग है।
दूसरा आर्गुमेंट कंप्रेशन टाइप पैरामीटर है - जो कंप्यूटर को बताता है कि फाइलों को कंप्रेस करने के लिए किस एल्गोरिदम का उपयोग करना चाहिए।
import zipfile
def file_compress(inp_file_names, out_zip_file):
"""function: file_compress
args: inp_file_names: list of filenames to be zipped
out_zip_file: output zip file
return: none"""
compression = zipfile.ZIP_DEFLATED
print(f" *** Input File name passed for zipping - {inp_file_names}")
print(f' *** out_zip_file is - {out_zip_file}')
zf = zipfile.ZipFile(out_zip_file, mode="w")
try:
for file_to_write in inp_file_names:
print(f' *** Processing file {file_to_write}')
zf.write(file_to_write, file_to_write, compress_type=compression)
except FileNotFoundError as e:
print(f' *** Exception occurred during zip process - {e}')
finally:
zf.close()
4. दो CSV फाइलें बनाने और फिर उन्हें ज़िप करने के लिए फंक्शन्स कॉल करें
हम 1 से अधिक ग्रैंड स्लैम खिताब जीतने वाले टेनिस खिलाड़ियों के डेटा का उपयोग एक फाइल - temporary_file1_for_zip.csv के लिए करेंगे और 1 या उससे कम ग्रैंड स्लैम जीतने वाले खिलाड़ियों के लिए दूसरी फाइल temporary_file2_for_zip.csv। फिर हम दोनों फाइलों को temporary.zip फाइल में ज़िप करेंगे।
file_name1 = "temporary_file1_for_zip.csv"
file_name2 = "temporary_file2_for_zip.csv"
file_name_list = [file_name1, file_name2]
zip_file_name = "temporary.zip"
file_data_1 = """player,titles
Federer,20
Nadal,20
Djokovic,17
Murray,3"""
file_data_2 = """player,titles
Theim,1
Zverev,0
Medvedev,0
Rublev,0"""
write_data_to_files(file_data_1, file_name1)
write_data_to_files(file_data_2, file_name2)
file_compress(file_name_list, zip_file_name)
5. पूरा कोड एक साथ
import zipfile
import io
import pandas as pd
def write_data_to_files(inp_data, file_name):
print(f" *** Writing the data to - {file_name}")
throwaway_storage = io.StringIO(inp_data)
with open(file_name, 'w') as f:
for line in throwaway_storage:
f.write(line)
def file_compress(inp_file_names, out_zip_file):
compression = zipfile.ZIP_DEFLATED
print(f" *** Input File name passed for zipping - {inp_file_names}")
print(f' *** out_zip_file is - {out_zip_file}')
zf = zipfile.ZipFile(out_zip_file, mode="w")
try:
for file_to_write in inp_file_names:
print(f' *** Processing file {file_to_write}')
zf.write(file_to_write, file_to_write, compress_type=compression)
except FileNotFoundError as e:
print(f' *** Exception occurred during zip process - {e}')
finally:
zf.close()
if __name__ == '__main__':
file_name1 = "temporary_file1_for_zip.csv"
file_name2 = "temporary_file2_for_zip.csv"
file_name_list = [file_name1, file_name2]
zip_file_name = "temporary.zip"
file_data_1 = """player,titles
Federer,20
Nadal,20
Djokovic,17
Murray,3"""
file_data_2 = """player,titles
Theim,1
Zverev,0
Medvedev,0
Rublev,0"""
write_data_to_files(file_data_1, file_name1)
write_data_to_files(file_data_2, file_name2)
file_compress(file_name_list, zip_file_name)
आउटपुट:
temporary_file1_for_zip.csvवर्तमान डायरेक्टरी में बनाया गया।temporary_file2_for_zip.csvवर्तमान डायरेक्टरी में बनाया गया।temporary.zipफाइल वर्तमान डायरेक्टरी में बनाई गई।