Grundlegende Verwendung der Dateibetriebstechnologie

1. Textdateien und Binärdateien:

  • Textdatei: Speichern Sie normalen Zeichentext. Die Standardeinstellung ist der Unicode-Zeichensatz (zwei Bytes stehen für ein Zeichen), der bis zu 65536 darstellen kann
  • Binärdatei: Der Inhalt wird in "Bytes" gespeichert und kann nicht mit Notepad geöffnet werden. Übliche sind: Video, Audio, Bild, DOC-Datei

2. Module für den Dateibetrieb

  • Eingabe und Ausgabe des Io-Dateistreams
  • Grundlegende Betriebssystemfunktionen
  • glob findet Dateipfadnamen, die bestimmten Regeln entsprechen
  • fnmatch verwendet ein Muster, um dem Pfadnamen einer Datei zu entsprechen
  • fileinput verarbeitet mehrere Eingabedateien
  • filecmp zum Dateivergleich
  • cvs wird für die Verarbeitung von cvs-Dateien verwendet
  • pickle & cPickle zur Serialisierung und Deserialisierung
  • XML wird für die XML-Datenverarbeitung verwendet
  • bz2 gzip zipfile zlib tarfile wird verwendet, um komprimierte und dekomprimierte Dateien zu verarbeiten, die verschiedenen Algorithmen entsprechen

3. Erstellen Sie ein Dateiobjekt

open (): open (Dateiname [, openmodel]): f = open (r "d: \ b.txt", "a")

Wenn es sich nur um einen Dateinamen handelt, stellt er die Datei im aktuellen Verzeichnis dar. Der Dateiname kann im vollständigen Pfad eingegeben werden. R reduziert die Eingabe von \

  • Offene Methode:
    • r Lesemodus
    • w Schreibmodus Wenn die Datei nicht vorhanden ist, erstellen Sie sie, falls vorhanden, lesen und schreiben Sie den Inhalt erneut
    • Ein Append-Modus wird automatisch erstellt, wenn die Append-Datei nicht vorhanden ist
    • b Wenn im Binärmodus „b“ nicht geschrieben ist, ist die Standardeinstellung eine Textdatei
    • + Lese- und Schreibmodus

4. Allgemeine Codierungsmethoden

  • ASCII 7-Bits können nur 128 Zeichen darstellen
  • SIO8859-1 8 Bits stehen für 1 Zeichen, können 256 Zeichen darstellen und sind mit ASCII kompatibel
  • GBK GB2312 GB18030 Chinesische Schriftzeichen nach nationalem Standard 2 Byte
  • Unicode-Codierung mit fester Länge, 2 Byte stellen die Codierungsform dar, die Python standardmäßig für ein Zeichen verwendet
  • Die UTF-8-Codierung mit variabler Länge, die 1 bis 4 Bytes codiert, repräsentiert ein Zeichen für Englisch und ein Byte für chinesische Zeichen und 3 Bytes für chinesische Zeichen

5. Schritte zum Schreiben von Dateien

  1. Dateiobjekt erstellen
  2. Dateneingabe
  3. Dateiobjekt schließen

Es gibt drei weitere gängige Methoden, die wie folgt aufgezeichnet werden:

filename = "my01.txt"
f = open(filename,'w', encoding='UTF-8')
s = "OLG\nHello\n小可爱\n"
f.write(s)
f.close() # 关闭文件流
try:
    f = open(r"test/my02.txt","a") # 先写入缓存区
    str = "hello,my02"
    f.write(str) #再将内容写入文件
except BaseException as e:
    print(e)
finally:
    f.close()
# with语句 上下文管理器:自动管理上下文资源,不管什么原因跳出with块,都能确保文件正常关闭:
s = ["小可爱\n","hello\n"]
with open(r"my03.txt","a",encoding="UTF-8") as f:
    f.writelines(s) #逐行写入

6. Lesen von Dateien

  • read ([size]) liest Größenzeichenfolgen aus der Datei und gibt sie als Ergebnis zurück. Wenn keine Größe vorhanden ist, wird die gesamte Datei bis zum Ende gelesen und eine leere Zeichenfolge zurückgegeben
  • readline () liest eine Zeile als Ergebnis und gibt sie zurück. Beim Lesen bis zum Ende der Datei wird eine leere Zeichenfolge zurückgegeben
  • readlines () In der Textdatei wird jede Zeile als Zeichenfolge in der Liste gespeichert und die Liste zurückgegeben
with open("test/my01.txt",'r',encoding='UTF-8') as f:
    for a in f:
        print(a,end=" ")

Hinweis: enumerate () Seriennummer hinzufügen

a = ['a\n','b\n','c\n']
b = enumerate(a)
print(a)
print(list(b)) #b:(0,‘cao’)。。。

# 读取行号
c = [temp.rstrip() + " # " + str(index) for index,temp in enumerate(a)] # .rstrip() 去分隔符\n
# print(c)

with open('caotest/my01.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    lines = [line.rstrip() + '#' + str(index) + '\n' for index,line in enumerate(lines)]
    print(lines)

7. Lesen und Schreiben von Binärdateien

  • file_mode = wb rb ab und der Rest sind gleich

8. Allgemeine Attribute und Methoden von Dateiobjekten

  1. Attribute:
  • Name
  • Modus
  • geschlossen
  1. Öffnungsmodus:
  • r
  • w
  • ein
  • b
  • +
  1. Allgemeine Methoden für Dateiobjekte:
  • lesen ([Größe])

  • Zeile lesen()

  • readlines ()

  • schreibe (str)

  • writelines (str) fügt keine Zeilenumbrüche hinzu

  • suchen (Versatz [, woher]) Bewegen Sie den Dateizeiger an eine neue Position. Versatz repräsentiert die Position relativ zum Warum

    • Offset:
      • Aus ist positiv, um sich in die Endrichtung zu bewegen, negativ, um sich in die Startrichtung zu bewegen
    • woher:
      • 0 vom Anfang der Datei
      • 1 Berechnen Sie aus der aktuellen Position
      • 2 Berechnen Sie ab dem Ende der Datei
  • tell () gibt die aktuelle Position des Dateizeigers zurück

  • kürzen (Größe) Egal wo es ist, nur die Größenbytes vor dem Zeiger bleiben übrig und der Rest wird gelöscht

  • flush () schreibt den Inhalt des Puffers in die Datei, schließt die Datei jedoch nicht

  • close () Schreiben Sie den Inhalt des Puffers in die Datei, schließen Sie die Datei gleichzeitig und geben Sie die zugehörigen Ressourcen frei

with open('caotest/my01.txt','r',encoding='utf-8') as f:
    print('filename:{0}'.format(f.name))
    print(f.tell()) #读取文件指针位置
    print('读取内容:{0}'.format(str(f.readline())))
    print(f.tell())
    f.seek(5) #改变文件的指针位置
    print('读取的内容:{0}'.format(str(f.readline())))

9. Mit Gurke serialisieren

In Python ist alles ein Objekt, im Wesentlichen ein "Speicherblock zum Speichern von Daten".

  • Serialisierung: Konvertieren Sie das Objekt in ein Datenformular mit "seriellem Verhältnis", speichern Sie es auf der Festplatte oder übertragen Sie es an andere Orte über das Netzwerk
  • Deserialisierung: Beim umgekehrten Vorgang werden die gelesenen "serialisierten Daten" in ein Objekt konvertiert
  • pickle (). dump (obj, file) obj ist das zu serialisierende Objekt, und file bezieht sich auf die gespeicherte Datei
  • pickle (). load (Datei) Liest Daten aus der Datei und deserialisiert sie in ein Objekt
# 序列化
with open(r'caotest/my07.txt','wb') as f:
    a1 = 'caoyh'
    a2 = 235
    a3 = [20,30,50]
    a4 = '小可爱'
    pickle.dump(a1,f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
    pickle.dump(a4,f)
# 反序列化
with open('test/my07.txt','rb') as f:
    for a in (a1,a2,a3,a4):
        a = pickle.load(f)
        print(a)

10. CSV-Dateivorgang

  • csv ist ein gutes Trennzeichen-Textformat, das häufig für den Datenaustausch verwendet wird.
  • Der Export und Import von Excel-Datei- und Datenbankdaten
    unterscheidet sich von der Excel-Datei und der CSV-Datei
    • Wert hat keinen Typ, alle Werte sind Zeichenfolgen
    • Stile wie die Schriftfarbe können nicht angegeben werden
    • Zellenhöhe und -breite können nicht angegeben werden, Zellen können nicht zusammengeführt werden
    • Keine mehreren Arbeitsblätter
    • Bilder können nicht eingebettet werden
      Der Unterschied zwischen CSV-Datei und Excel-Datei
import csv
with open('example-write.csv','r',encoding='utf-8') as f:
    a_csv = csv.reader(f)
    # print(a_csv)
    # print('*'*20)
    # print(list(a_csv))
    # print('*' * 20)
    for row in a_csv:
        print(row)

# csv文件写入
with open('example.csv','w') as f:
    b_csv = csv.writer(f)
    b_csv.writerow(["005","bb","18","1000"])

11.os und os.path Module

  • os.system () ruft direkt den Systembefehl os.system ("notepad.exe") auf.
  • os.system () ruft den Ping-Befehl des Fenstersystems os.system auf ("ping www.baidu.com")

OS-Modul

Fügen Sie hier eine Bildbeschreibung ein

import os
os.system('cmd')
# 直接打开应用
os.startfile(r'C:\Program Files (x86)\Sangfor\SSL\SangforCSClient.exe')

'''
获取文件和文件夹的相关信息
'''
print(os.name) # 返回操作系统的名字   window-->nt linux/unix-->posix
print(os.sep)  # 返回操作系统的分隔符 window-->\ linux unix-->/
print(repr(os.linesep))  # window-->\r\n linux unix-->\n\

print(os.stat('my01.txt')) # 获取文件信息

'''
创建目录,创建多级目录,删除目录
'''
#返回当前工作目录
print(os.getcwd())
#创建子目录
# os.mkdir("bookcaoyh")
#先指定目录,再创建子目录
os.chdir("D:/")
os.mkdir("caoyh")

'''
创建目录,创建多级目录,删除目录
'''
os.mkdir("小可爱") #创建目录
os.rmdir("cao") #删除目录
os.makedirs("cao/y/h") #创建多级目录
os.removedirs("cao/y/h") #删除多及目录 只能是空的才可以

os.makedirs("../cao/y") #../ 指的是上一级目录

os.rename("小可爱","cao") # 修改目录名字

dirs = os.listdir("caoyh") #列出一级子目录和子文件
print(dirs)

os.path Modul

Fügen Sie hier eine Bildbeschreibung ein

import os.path

#### 指的是相对路径
############判断:绝对路径、是否目录、是否文件、文件是否存在###################
print(os.path.isabs("d:/onedrive")) # True
print(os.path.isdir("d:/onedrive")) # True
print(os.path.isfile("d:/a.txt"))   # False
print(os.path.exists("d:/onedrive"))# True

############## 获取文件的基本信息 #############################
print(os.path.getsize("my01.txt")) #获得文件大小
print(os.path.abspath("my01.txt")) #获得文件的绝对路径
print(os.path.dirname("my01.txt")) #获得文件的相对路径

################ 路径的操作 ########################
path = os.path.abspath("my01.txt")
path2list = os.path.split(path)
print(path2list)

print(os.path.splitext(path))

print(os.path.join('caoyh','join'))

'''
练习指定目录下的所有.py文件,并输出文件名
'''
import os
path = os.getcwd()
file_list = os.listdir(path)
for filename in file_list:
    if filename.endswith("py"):
        print(filename,end='\t')

print('\n'+"*"*20)

file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py")]
for f in file_list2:
    print(f,end='\t')

os.walk () durchläuft alle Dateien rekursiv

Fügen Sie hier eine Bildbeschreibung ein

'''
测试os.walk()递归遍历所有的子目录和文件夹
'''
path = os.getcwd()#返回绝对路径
print(path+'\n')
list_files = os.walk(path)

for dirpaths,dirnames,filenames in list_files:
    for dir in dirnames:
        print(os.path.join(dirpaths,dir))
    # print('*'*20)
    for file in filenames:
        print(os.path.join(dirpaths,file))

12.Shutil-Modul (Kopieren und Komprimieren)

Fügen Sie hier eine Bildbeschreibung ein

## shutil : 拷贝和压缩

import shutil

# 拷贝文件
shutil.copyfile('1.txt','1_copy.txt')

# 拷贝文件夹 以及其中的内容 只能拷贝一次,多次则报错
shutil.copytree('movie','example')

# 压缩 解压缩
shutil.make_archive('example/haha','zip','movie') # 将movie文件夹下的文件,以zip格式压缩至example文件夹下命名为haha

import zipfile
# z1 = zipfile.ZipFile('z1.zip','w')
# z1.write('1.txt')
# z1.write('1_copy.txt')
# z1.close()

z2 = zipfile.ZipFile('z1.zip','r')
z2.extractall('z2')
z2.close()

Ich denke du magst

Origin blog.csdn.net/qq_44783177/article/details/108059388
Empfohlen
Rangfolge