Opérations sur les fichiers Python


Après avoir utilisé open pour ouvrir un fichier, assurez-vous d'appeler la méthode close() de l'objet fichier. Par exemple, vous pouvez utiliser l'instruction try/finally pour garantir que le fichier peut être définitivement fermé.

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

Remarque : L'instruction open ne peut pas être placée dans le bloc try, car lorsqu'une exception se produit lors de l'ouverture du fichier, l'objet fichier file_object ne peut pas exécuter la méthode close().


Cliquez (ici) pour réduire ou ouvrir

#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


2. Lire le fichier

Lire le fichier texte

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

Lire le fichier binaire

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

Lire tout le contenu

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

Lire les octets fixes

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( )

Lire chaque ligne

list_of_all_the_lines = file_object.readlines( )


Si le fichier est un fichier texte, vous pouvez également parcourir directement l'objet fichier pour obtenir chaque ligne :

for line in file_object:
     process line

3. Écrire des fichiers

Écrire des fichiers texte

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

Écrire des fichiers binaires

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

Ajouter des fichiers d'écriture

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

Écrire des données

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

Écrivez plusieurs lignes

file_object.writelines(list_of_text_strings)


Notez qu'appeler writelines pour écrire plusieurs lignes aura de meilleures performances que d'utiliser write pour écrire en une seule fois.

Lors du traitement des fichiers journaux, nous rencontrons souvent la situation suivante : le fichier journal est volumineux et il est impossible de lire l'intégralité du fichier dans la mémoire pour le traiter en une seule fois. Par exemple, il doit être traité sur une machine avec. une mémoire physique de 2 Go Pour un fichier journal de 2 Go, nous souhaiterons peut-être traiter seulement 200 Mo de son contenu à la fois.
En Python, l'objet File intégré fournit directement une fonction readlines (sizehint) pour accomplir une telle chose. Prenons comme exemple le code suivant :

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)


Chaque fois que la fonction readlines(sizehint) est appelée, environ 200 Mo de données seront renvoyées et les données renvoyées doivent être des données de ligne complètes. Dans la plupart des cas, le nombre d'octets des données renvoyées sera légèrement supérieur à la valeur. spécifié par sizehint. Un peu (sauf lorsque la fonction readlines(sizehint) est appelée pour la dernière fois). Normalement, Python ajustera automatiquement la valeur sizehint spécifiée par l'utilisateur à un multiple entier de la taille du cache interne.


1. Utilisez Python pour créer un nouveau fichier, le contenu est un entier de 0 à 9, chaque nombre occupe une ligne :

#python
>>>f=open('f.txt','w')    # r只读,w可写,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
.  .  .
>>> f.close()


2. Ajoutez le contenu du fichier, 10 entiers aléatoires de 0 à 9 :
#python
>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
.  .  .
>>>f.write('\n')
>>>f.close()


3. Ajoutez le contenu du fichier, des entiers aléatoires de 0 à 9, 10 nombres par ligne, 10 lignes au total :
#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
.  .  .     for i in range(0,10):f.write(str(random.randint(0,9))) 
.  .  .     f.write('\n')    
.  .  .
>>> f.close()


4. Dirigez la sortie standard vers le fichier :
#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>>  . . .


. 5. Lecture et écriture du fichier

1. Ouvrez le fichier :

f = file(name[, mode[, buffering]])

Paramètres d'entrée : nom nom du fichier

option, chaîne

mise en mémoire tampon si Buffering (0=pas de mise en mémoire tampon, 1=buffering, >1 nombre int = taille du tampon)

Valeur de retour : objet fichier

option de mode :

"r" Ouvert en mode lecture, seul le fichier peut être lu, if Si le fichier n'existe pas, une exception se produira.

"w" est ouvert en mode écriture et ne peut être écrit que dans le fichier. Si le fichier n'existe pas, créez le fichier

 rb" en binaire Ouvrir dans. en mode lecture, vous ne pouvez lire que le fichier. Si le fichier n'existe pas, une exception se produira.

"wb" Ouvert en mode écriture binaire, vous ne pouvez écrire le fichier que si le fichier n'existe pas, créez le fichier. .

vide, puis ouvrez le fichier

"rt" Ouvert en mode lecture de texte, vous ne pouvez lire que le fichier, si le fichier n'existe pas, une exception se produira

"wt" Ouvert en mode écriture de texte, vous ne pouvez écrire que le fichier, si le fichier n'existe pas, créez ce fichier

, Si le fichier a déjà existé, effacez d'abord le fichier, puis ouvrez le fichier

"RB+" l'ouvre en lecture binaire. Vous pouvez lire et écrire des fichiers. Si le fichier n'existe pas, cela se produira. un fichier, si le fichier n'existe pas, créez le fichier

                                                                                                                                                                                                 

Lorsque le fichier est lu et écrit, le dossier devrait être fermé.

3. Effacer le contenu du fichier

f.truncate()

Remarque : seuls les fichiers ouverts en mode écriture tels que "r+" "rb+" "w" "wb" "wb+" peuvent exécuter cette fonction. .

4. Positionnement et requête du pointeur de fichier

(1) Pointeur de fichier : Une fois le fichier ouvert, son objet est enregistré dans f. Il se souviendra de l'emplacement actuel du fichier pour faciliter les opérations de lecture et d'écriture. , cette position est appelée pointeur de fichier (un type long comptant le nombre d'octets à partir du début du fichier).开 (2) La position à laquelle le fichier est ouvert :

Lisez la méthode de lecture "R" "" R+"" Rb+", W "" W+"" "WB+" en écrivant les fichiers ouverts.

(3) Obtenez la valeur du pointeur de fichier :

L = f.tell()

(4) Déplacez le pointeur de fichier

f.seek(offset, option) Option=0 Quand , il signifie pointer le pointeur de fichier depuis la tête du fichier vers l'octet "offset".

Lorsque l'option =1, cela signifie pointer le pointeur de fichier vers la position actuelle du fichier et déplacer les octets "offset" vers l'arrière.

Lorsque l'option =2, cela signifie pointer le pointeur de fichier vers la fin du fichier et déplacer les octets "offset" vers l'avant.

5. Lecture du contenu du fichier

1 Lecture des fichiers texte (fichiers ouverts en mode "rt")

      s = f.readline(     )

            Valeur de retour : s est une chaîne, une ligne lue dans le fichier, y compris le terminateur de ligne.如果 Explication : (1) Si len(s) = 0 signifie qu'il a atteint la fin du fichier (2) S'il s'agit de la dernière ligne du fichier, il se peut qu'il n'y ait pas de tissu de fin

2 fichiers binaires (" RB", "" "" "Rb", "" "" rb+", "wb+") lecture

s = f.read( n )

Pour les photos, vidéos et autres fichiers, vous devez utiliser le mode b pour lire et écrire Notes : (1) Si len( s ) =0 signifie que la fin du fichier a été atteinte

                          (2) Une fois le fichier lu, le pointeur du fichier recule len(s) octets.道 (3) Si le tractus magnétique est mauvais, cela se produira de manière anormale.

6. Écrivez une chaîne dans le fichier

Puis déplacez le(s) octet(s).道 (2) Si le tractus magnétique est mauvais ou si le disque est plein, des anomalies se produiront.

       

Valeur de retour : s est une chaîne, le contenu lu à partir du fichier

7. Supprimer le fichier

importer os

os.remove(file)