python - मैं अजगर में एक फाइल कैसे कॉपी करूं?




file copy (10)

मैं पायथन में एक फाइल कैसे कॉपी करूं? मुझे os तहत कुछ भी नहीं मिला।


आप shutil पैकेज से कॉपी कार्यों में से एक का उपयोग कर सकते हैं:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Function              preserves     supports          accepts     copies other
                      permissions   directory dest.   file obj    metadata  
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
shutil.copy              ✔             ✔                 ☐           ☐
shutil.copy2             ✔             ✔                 ☐           ✔
docs.python.org/3/library/shutil.html#shutil.copyfile          ☐             ☐                 ☐           ☐
shutil.copyfileobj       ☐             ☐                 ✔           ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

उदाहरण:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')

आप os.system('cp nameoffilegeneratedbyprogram /otherdirectory/') उपयोग कर सकते हैं

या जैसा मैंने किया था,

os.system('cp '+ rawfile + ' rawdata.dat')

जहां rawfile वह नाम है जिसे मैंने प्रोग्राम के अंदर उत्पन्न किया था।

यह एक लिनक्स केवल समाधान है


पायथन में, आप फ़ाइलों का उपयोग कर प्रतिलिपि बना सकते हैं

import os
import shutil
import subprocess

1) shutil मॉड्यूल का उपयोग कर फाइलों की प्रतिलिपि बनाएँ

docs.python.org/3/library/shutil.html#shutil.copyfile हस्ताक्षर

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)

# example    
shutil.copyfile('source.txt', 'destination.txt')

shutil.copy हस्ताक्षर

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy('source.txt', 'destination.txt')

shutil.copy2 हस्ताक्षर

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy2('source.txt', 'destination.txt')  

shutil.copyfileobj हस्ताक्षर

shutil.copyfileobj(src_file_object, dest_file_object[, length])

# example
file_src = 'source.txt'  
f_src = open(file_src, 'rb')

file_dest = 'destination.txt'  
f_dest = open(file_dest, 'wb')

shutil.copyfileobj(f_src, f_dest)  

2) os मॉड्यूल का उपयोग कर फाइलों की प्रतिलिपि बनाएँ

os.popen हस्ताक्षर

os.popen(cmd[, mode[, bufsize]])

# example
# In Unix/Linux
os.popen('cp source.txt destination.txt') 

# In Windows
os.popen('copy source.txt destination.txt')

os.system हस्ताक्षर

os.system(command)


# In Linux/Unix
os.system('cp source.txt destination.txt')  

# In Windows
os.system('copy source.txt destination.txt')

3) subprocess मॉड्यूल का उपयोग कर फाइलों की प्रतिलिपि बनाएँ

subprocess.call हस्ताक्षर

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.call('cp source.txt destination.txt', shell=True) 

# In Windows
status = subprocess.call('copy source.txt destination.txt', shell=True)

subprocess.check_output हस्ताक्षर

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.check_output('cp source.txt destination.txt', shell=True)

# In Windows
status = subprocess.check_output('copy source.txt destination.txt', shell=True)

फ़ाइल को कॉपी करना अपेक्षाकृत सरल ऑपरेशन है जैसा कि नीचे दिए गए उदाहरणों से दिखाया गया है, लेकिन इसके बजाय आपको इसके लिए शटल stdlib मॉड्यूल का उपयोग करना चाहिए।

def copyfileobj_example(source, dest, buffer_size=1024*1024):
    """      
    Copy a file from source to dest. source and dest
    must be file-like objects, i.e. any object with a read or
    write method, like for example StringIO.
    """
    while True:
        copy_buffer = source.read(buffer_size)
        if not copy_buffer:
            break
        dest.write(copy_buffer)

अगर आप फ़ाइल नाम से कॉपी करना चाहते हैं तो आप ऐसा कुछ कर सकते हैं:

def copyfile_example(source, dest):
    # Beware, this example does not handle any edge cases!
    with open(source, 'rb') as src, open(dest, 'wb') as dst:
        copyfileobj_example(src, dst)

मैं Swati's उत्तर Swati's उपयोग करने का सुझाव देता हूं, लेकिन मान लीजिए कि आपके पास एक टेक्स्ट फ़ाइल है और आप इसे कॉपी करने के लिए अपने कोड में अतिरिक्त पुस्तकालयों का उपयोग नहीं करना चाहते हैं, तो आप निम्न एक-लाइनर का उपयोग कर सकते हैं:

with open(source, 'r') as src, open(dest, 'w') as dst: dst.write(src.read())

मॉड्यूल शटल देखें । इसमें फ़ंक्शन कॉपीफाइल ( src , dst ) है


shutil में कई विधियां हैं जिनका आप उपयोग कर सकते हैं। इनमें से एक है:

from shutil import copyfile

copyfile(src, dst)

dst नाम की फ़ाइल में src नाम की फ़ाइल की सामग्री की प्रतिलिपि बनाएँ। गंतव्य स्थान लिखने योग्य होना चाहिए; अन्यथा, एक IOError अपवाद उठाया जाएगा। यदि dst पहले से मौजूद है, तो इसे बदल दिया जाएगा। चरित्र या ब्लॉक उपकरणों और पाइप जैसे विशेष फाइलों को इस फ़ंक्शन के साथ कॉपी नहीं किया जा सकता है। src और dst स्ट्रिंग्स के रूप में दिए गए पथ नाम हैं।


copy2(src,dst) अक्सर copy2(src,dst) से अधिक उपयोगी है क्योंकि:

  • यह dst को एक निर्देशिका (पूर्ण लक्ष्य फ़ाइल नाम के बजाय) होने की अनुमति देता है, इस मामले में नई फ़ाइल बनाने के लिए src का basename का उपयोग किया जाता है;
  • यह फाइल मेटाडेटा में मूल संशोधन और एक्सेस जानकारी (एमटाइम और एटिम) को सुरक्षित रखता है (हालांकि, यह मामूली ओवरहेड के साथ आता है)।

यहां एक छोटा सा उदाहरण दिया गया है:

import shutil
shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given
shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext

---------------------------------------------------------------------------
| Function          |Copies Metadata|Copies Permissions|Can Specify Buffer|
---------------------------------------------------------------------------
| shutil.copy       |      No       |        Yes       |        No        |
---------------------------------------------------------------------------
| shutil.copyfile   |      No       |         No       |        No        |
---------------------------------------------------------------------------
| shutil.copy2      |     Yes       |        Yes       |        No        |
---------------------------------------------------------------------------
| shutil.copyfileobj|      No       |         No       |       Yes        |
---------------------------------------------------------------------------

from subprocess import call
call("cp -p <file> <file>", shell=True)




copyfile