Operasi fail Python


Selepas menggunakan open untuk membuka fail, pastikan anda memanggil kaedah close() objek fail. Sebagai contoh, anda boleh menggunakan pernyataan cuba/akhirnya untuk memastikan fail itu boleh ditutup akhirnya.

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

Nota: Pernyataan terbuka tidak boleh diletakkan dalam blok cuba, kerana apabila pengecualian berlaku semasa membuka fail, objek fail fail_objek tidak boleh melaksanakan kaedah tutup(). .

Baca Fail binari


#coding:utf-8
#!/usr/bin/python
# Filename: fileRW.py
import os

context=""" hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件"""
def createfileBYwrite(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    f.write(context) #把字符串写入文件
    f.close() #关闭文件

#注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
def createfileBYwritelines(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    try:
        f.writelines(context) #把字符串写入文件
    finally: 
        f.close() #关闭文件

def readBYreadline(filename):
    f = open(filename)
    while True:
        line =f.readline()#当文件指针移动到末尾继续readline会出现错误,所以后面要加判断
        if line:
            print line,
        else:
            break
    f.close()

#需要通过循环访问readlines()返回列表中的元素
def readBYreadlines(filename):
    f = open(filename)
    try:
        lines = f.readlines()
        for line in lines:
            print line,
    finally:
        f.close()
    
#从文件中读取所有内容,赋予一个字符串变量
def readBYread(filename):
    f = open(filename)
    try:
        content = f.read()
    finally:
        f.close()
    print content 
    
if __name__== "__main__":
    filename="hello.txt"
    createfileBYwritelines(filename)
    readBYread(filename)
    #把文件删除掉
    if os.path.exists(filename):
        print "文件存在%s" %filename
        os.remove(filename)
    
    
 hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件
文件存在hello.txt

Baca semua kandungan

input = open('data', 'r')
#第二个参数默认为r
input = open('data')

Baca bait tetap

input = open('data', 'rb')

Baca setiap baris
file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

juga adalah fail trafik secara terus jika anda boleh mendapatkan fail fail :

file_object = open('abinfile', 'rb')
try:
    while True:
         chunk = file_object.read(100)
        if not chunk:
            break
         do_something_with(chunk)
finally:
     file_object.close( )

3. Tulis fail

Tulis fail teks
list_of_all_the_lines = file_object.readlines( )

Tulis fail binari
for line in file_object:
     process line

penulisan semula


Tulis data

output = open('data', 'w')

Tulis berbilang baris

output = open('data', 'wb')

Perhatikan bahawa memanggil baris tulis untuk menulis berbilang baris akan mempunyai prestasi yang lebih tinggi daripada menggunakan tulis untuk menulis sekali gus.

Apabila memproses fail log, kita sering menghadapi situasi sedemikian: fail log adalah besar dan mustahil untuk membaca keseluruhan fail ke dalam memori untuk diproses pada satu masa Contohnya, ia perlu diproses pada mesin dengan a memori fizikal 2GB Untuk fail log 2GB, kami mungkin mahu memproses hanya 200MB kandungannya pada satu masa.

Dalam Python, objek Fail terbina dalam secara langsung menyediakan fungsi readlines(sizehint) untuk mencapai perkara sedemikian. Ambil kod berikut sebagai contoh:

output = open('data', 'w+')


Setiap kali fungsi readlines(sizehint) dipanggil, kira-kira 200MB data akan dikembalikan dan data yang dikembalikan mestilah data baris yang lengkap Dalam kebanyakan kes, bilangan bait data yang dikembalikan akan lebih besar sedikit daripada nilai ditentukan oleh sizehint Sedikit (kecuali apabila fungsi readlines(sizehint) dipanggil untuk kali terakhir). Biasanya, Python akan melaraskan nilai sizehint yang ditentukan pengguna secara automatik kepada gandaan integer saiz cache dalaman.


1. Gunakan Python untuk mencipta fail baharu, kandungannya ialah integer dari 0 hingga 9, setiap nombor menduduki satu baris:

file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )


2. Tambahkan kandungan fail, 10 integer rawak dari 0 hingga 9 :
file_object.writelines(list_of_text_strings)


3 Tambahkan kandungan fail, integer rawak dari 0 hingga 9, 10 nombor setiap baris, 10 baris secara keseluruhan:
file = open('test.log', 'r') sizehint = 209715200   # 200M position = 0 lines = file.readlines(sizehint) while not file.tell() - position < 0:        position = file.tell()        lines = file.readlines(sizehint)


4. 5. Membaca dan menulis Fail


1. Buka fail:

f = fail(nama[, mod[, penimbalan]])

Parameter entri: nama nama fail

pilihan mod, rentetan penimbalan sama ada Penimbalan (0=tiada penimbalan, 1=penimbalan, >1 nombor int = saiz penimbal)

Nilai pulangan: objek fail

pilihan mod:

"r" Buka dalam mod baca, hanya fail boleh dibaca , jika fail tidak wujud, pengecualian akan berlaku

"w" dibuka dalam mod penulisan dan hanya boleh ditulis ke fail Jika fail tidak wujud, buat fail

 rb" dalam binari Terbuka dalam mod baca, anda hanya boleh membaca fail Jika fail tidak wujud, pengecualian akan berlaku

"wb" Buka dalam mod penulisan binari, anda hanya boleh menulis fail tersebut fail.

kosong , dan kemudian buka fail

"rt" Buka dalam mod bacaan teks, anda hanya boleh membaca fail, jika fail itu tidak wujud, pengecualian akan berlaku

"wt" Buka dalam mod penulisan teks , anda hanya boleh menulis fail, jika fail itu tidak wujud, buat fail ini

, Jika fail itu telah wujud, kosongkan fail itu dahulu, dan kemudian buka fail

"RB+" membukanya dalam bacaan binari Anda boleh membaca dan menulis fail Jika fail itu tidak wujud, ia akan berlaku fail, jika fail itu tidak wujud, buat fail

                                                                                                                                                                                                                                                                                                                                         ditulis , fail hendaklah ditutup.

3. Kosongkan kandungan fail

f.truncate()

Nota: Hanya fail yang dibuka dalam mod boleh tulis seperti "r+" "rb+" "w" "wb" "wb+" boleh Melaksanakan fungsi ini .

4. Kedudukan penunjuk fail dan pertanyaan

(1) Penunjuk fail:

Selepas fail dibuka, objeknya disimpan dalam f. Ia akan mengingati lokasi semasa fail untuk memudahkan operasi membaca dan menulis. , kedudukan ini dipanggil penuding fail (jenis panjang mengira bilangan bait bermula dari permulaan fail).开 (2) Kedudukan apabila fail dibuka:

Baca "R" "" R+"" Rb+"kaedah membaca," W "" W+"" "WB+" menulis fail terbuka.

(3) Dapatkan nilai penuding fail:

L = f.tell()

(4) Gerakkan penuding fail

f.seek(offset, option) Option=0 Bila , ia bermaksud untuk menghalakan penuding fail dari kepala fail ke bait "offset".

Apabila pilihan =1, ia bermaksud untuk menghalakan penuding fail ke kedudukan semasa fail dan mengalihkan bait "offset" ke belakang.

Apabila pilihan =2, ia bermaksud untuk menghalakan penuding fail ke hujung fail dan mengalihkan bait "offset" ke hadapan.

5 Membaca kandungan daripada fail

1 Membaca fail teks (fail dibuka dalam mod "rt")

      s = f.readline(     )

            Nilai pulangan: s ialah rentetan, baris dibaca daripada fail, termasuk penamat baris.如果 Penjelasan: (1) Jika len (s) = 0 bermakna ia telah sampai ke penghujung fail (2) Jika ia adalah baris terakhir fail, mungkin tiada fabrik penghujung

2 fail binari (" RB", "" "" "Rb", "" "" rb+", "wb+" mod) membaca

s = f.read( n )

Untuk gambar, video dan fail lain, anda mesti menggunakan mod b untuk membaca dan menulis Nota: (1) Jika len( s ) =0 bermakna penghujung fail telah dicapai

                          (2) Selepas fail dibaca, penuding fail bergerak ke belakang len(s) bait.道 (3) Jika saluran magnetik buruk, ia akan berlaku tidak normal.

6. Tulis rentetan pada fail

Kemudian gerakkan len(s) bait.道 (2) Jika saluran magnetik buruk, atau cakera penuh, keabnormalan akan berlaku.

       

Nilai pulangan: s ialah rentetan, kandungan dibaca daripada fail

7. Padam fail

import os

os.remove(fail)