Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Dateioperations-API

Python-Dateioperations-API

高洛峰
高洛峰Original
2017-02-27 17:05:531061Durchsuche

Der Betrieb von Dateien und Ordnern (Dateibetriebsfunktionen) in Python erfordert das OS-Modul und das Shutil-Modul.

Rufen Sie das aktuelle Arbeitsverzeichnis ab, also den Verzeichnispfad, in dem das aktuelle Python-Skript arbeitet: os.getcwd()
Gibt alle Dateien und Verzeichnisnamen im angegebenen Verzeichnis zurück : os.listdir()
Funktion zum Löschen einer Datei: os.remove()
Mehrere Verzeichnisse löschen: os.removedirs(r"c:python")
Überprüfen Sie, ob der angegebene Pfad eine Datei ist : os.path .isfile()
Überprüfen Sie, ob der angegebene Pfad ein Verzeichnis ist: os.path.isdir()
Überprüfen Sie, ob es sich um einen absoluten Pfad handelt: os.path.isabs()
Überprüfen Sie, ob Der angegebene Pfad ist wahr. Lokaler Speicher: os.path.exists()
Gibt den Verzeichnisnamen und den Dateinamen eines Pfads zurück: os.path.split(), z. B. os.path.split('/home/swaroop/byte /code/poem.txt' ) Ergebnis: ('/home/swaroop/byte/code', 'poem.txt')
Erweiterung aufteilen: os.path.splitext()
Pfadnamen abrufen: os.path .dirname()
Dateinamen abrufen: os.path.basename()
Shell-Befehl ausführen: os.system()
Umgebungsvariablen lesen und festlegen: os.getenv() und os.putenv()
give Geben Sie den von der aktuellen Plattform verwendeten Zeilenabschluss an: os.linesep Windows verwendet „rn“, Linux verwendet „n“ und Mac verwendet „r“
um die von Ihnen verwendete Plattform anzugeben: os.name Für Windows , es ist 'nt', während es für Linux/Unix-Benutzer 'posix' ist
Umbenennen: os.rename(old, new)
Mehrstufiges Verzeichnis erstellen: os.makedirs(r "c:pythontest" )
Einzelnes Verzeichnis erstellen: os.mkdir („test“)
Dateiattribute abrufen: os.stat (Datei)
Dateiberechtigungen und Zeitstempel ändern: os.chmod (Datei)
Aktuelles beenden Prozess: os.exit ()
Dateigröße abrufen: os.path.getsize(filename)

Dateivorgang:
os.mknod("test.txt") Erstellen Sie eine leere Datei
fp = open("test.txt",w) Öffnen Sie eine Datei direkt. Wenn die Datei nicht vorhanden ist, erstellen Sie die Datei

Über den Öffnungsmodus:

w zum Schreiben Im Anhängemodus öffnen,
a Im Anhängemodus öffnen (mit EOF beginnen, ggf. neue Datei erstellen)
r+ Im Lese-/Schreibmodus öffnen
w+ Im Lesemodus öffnen -Schreibmodus (siehe w)
a+ Im Lesemodus öffnen Im Schreibmodus öffnen (siehe a)
rb Im binären Lesemodus öffnen
wb Im binären Schreibmodus öffnen (siehe w)
ab Im Schreibmodus öffnen binärer Anhängemodus (siehe a)
rb+ Lesen und Schreiben im binären Modus offen (siehe r+)
wb+ Öffnen im binären Lese-/Schreibmodus (siehe w+)
ab+ Öffnen im binären Lese-/Schreibmodus (siehe a+ )

fp.read ([size]) #Size ist die Länge des Lesevorgangs und die Einheit
fp.reamline ([size]) #read ist Teil von
fp.readlines([size ])                                                                                                                                                     # Behandeln Sie jede Zeile der Datei als Mitglied einer Liste und geben Sie diese Liste zurück. Tatsächlich wird es intern durch den Aufruf von readline() in einer Schleife implementiert. Wenn der Größenparameter angegeben wird, stellt die Größe die Gesamtlänge des gelesenen Inhalts dar, was bedeutet, dass nur ein Teil der Datei gelesen werden darf.
fp.write(str)                                                                                                                                                                                                                                                (Mehrere Zeilen gleichzeitig geschrieben). Diese Funktion schreibt auch einfach originalgetreu, ohne nach jeder Zeile etwas hinzuzufügen.
fp.close()                                                                                                   Python schließt eine Datei automatisch, wenn sie nicht mehr verwendet wird. Diese Funktion ist jedoch nicht garantiert. Es ist am besten, die Gewohnheit zu entwickeln, sie selbst zu schließen. Wenn eine Datei nach dem Schließen bearbeitet wird, tritt ein ValueError auf.
fp.flush() #Gibt eine lange Ganzzahl „Dateibezeichnung“ zurück.
fp.isatty()                                                                                                        bis Die aktuelle Position, mit dem Anfang von die Datei als Ursprung
fp.                                                                                                                                                                                                 #Kehren Sie zur nächsten Zeile zurück und verschieben Sie die Dateivorgangsmarkierung in die nächste Zeile. Wenn eine Datei in einer Anweisung wie for...in file verwendet wird, wird die Funktion next() aufgerufen, um die Traversierung zu implementieren.
fp.seek(offset[,whence])                                                                                                                                                                  Verschieben Sie die Dateioperationsmarkierung an die Position des Versatzes. Dieser Versatz wird im Allgemeinen relativ zum Dateianfang berechnet und ist im Allgemeinen eine positive Zahl. Dies trifft jedoch nicht unbedingt zu, wenn der Wherece-Parameter angegeben wird. Wherece kann 0 sein, um die Berechnung von Anfang an zu starten, und 1, um die aktuelle Position als Ursprung zu verwenden. 2 gibt an, dass das Ende der Datei als Ausgangspunkt für die Berechnung verwendet wird. Es ist zu beachten, dass beim Öffnen der Datei im a- oder a+-Modus die Dateioperationsmarkierung bei jedem Schreibvorgang automatisch zum Ende der Datei zurückkehrt.
FP.TRUNCATE ([SIZE]) #

目录操作:
os.mkdir("file")                   创建目录
复制文件:
shutil.copyfile("oldfile","newfile")       oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir")        olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname")       文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")  
删除文件
os.remove("file")
删除目录
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir")    空目录、有内容的目录都可以删
转换目录
os.chdir("path")   换路径

相关例子

1 将文件夹下所有图片名称加上'_fc'

python代码:

# -*- coding:utf-8 -*-
import re
import os
import time
#str.split(string)分割字符串
#'连接符'.join(list) 将列表组成字符串
def change_name(path):
  global i
  if not os.path.isdir(path) and not os.path.isfile(path):
    return False
  if os.path.isfile(path):
    file_path = os.path.split(path) #分割出目录与文件
    lists = file_path[1].split('.') #分割出文件与文件扩展名
    file_ext = lists[-1] #取出后缀名(列表切片操作)
    img_ext = ['bmp','jpeg','gif','psd','png','jpg']
    if file_ext in img_ext:
      os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
      i+=1 #注意这里的i是一个陷阱
    #或者
    #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
    #if file_ext in img_ext:
    #  print('ok---'+file_ext)
  elif os.path.isdir(path):
    for x in os.listdir(path):
      change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用

img_dir = 'D:\\xx\\xx\\images'
img_dir = img_dir.replace('\\','/')
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print('程序运行耗时:%0.2f'%(c))
print('总共处理了 %s 张图片'%(i))

输出结果:

程序运行耗时:0.11
总共处理了 109 张图片


Python常见文件操作示例

    os.path 模块中的路径名访问函数
    分隔
    basename() 去掉目录路径, 返回文件名
    dirname() 去掉文件名, 返回目录路径
    join() 将分离的各部分组合成一个路径名
    split() 返回 (dirname(), basename()) 元组
    splitdrive() 返回 (drivename, pathname) 元组
    splitext() 返回 (filename, extension) 元组

    信息
    getatime() 返回最近访问时间
    getctime() 返回文件创建时间
    getmtime() 返回最近文件修改时间
    getsize() 返回文件大小(以字节为单位)

Abfrage
exist() Ob der angegebene Pfad (Datei oder Verzeichnis) existiert
isabs() Geben Sie an, ob der Pfad ein absoluter Pfad ist
isdir() Geben Sie an, ob der Pfad existiert und ein Verzeichnis ist
isfile( ) gibt an, ob der Pfad existiert und eine Datei ist
islink() gibt an, ob der Pfad existiert und ein symbolischer Link ist
ismount() gibt an, ob der Pfad existiert und ein Einhängepunkt ist
samefile () zwei Pfadnamen Ob es auf dieselbe Datei

os.path.isdir(name) verweist: Bestimmt, ob name ein Verzeichnis ist. Wenn name kein Verzeichnis ist, wird false zurückgegeben
os.path .isfile(name): Bestimmt, ob der Name eine Verzeichnisdatei ist. Wenn der Name nicht existiert, wird false zurückgegeben
os.path.exists(name): Bestimmt, ob der Datei- oder Verzeichnisname
existiert. path.getsize(name): Ermitteln Sie die Dateigröße. Wenn name ein Verzeichnis ist, geben Sie 0L zurück
os.path.abspath(name): Ermitteln Sie den absoluten Pfad
os.path.normpath(path): Normalisieren Sie die Pfadzeichenfolgenform
os.path.split(name): Teilen Sie den Dateinamen und das Verzeichnis auf (Tatsache: Wenn Sie Verzeichnisse vollständig verwenden, wird auch das letzte Verzeichnis als Dateiname getrennt und es wird nicht bestimmt, ob die Datei oder Verzeichnis existiert)
os.path.splitext(): Separate Dateinamen und Erweiterungen
os.path.join(path,name): Verzeichnis mit Dateinamen oder Verzeichnis verbinden
os.path.basename( path): Name der Rückgabedatei
os.path.dirname(path): Pfad der Rückgabedatei
                                                                                                                                                     pardir (der aktuelle Arbeitsverzeichnis-Stringname)

1. Umbenennen: os. rename(old, new)

2. Löschen: os.remove(file)
3. Listen Sie die Dateien im Verzeichnis auf: os.listdir(path)
4. Rufen Sie das aktuelle Arbeitsverzeichnis ab: os.getcwd()
5. Ändern Sie das Arbeitsverzeichnis: os.chdir(newdir)
6. Erstellen Sie ein mehrstufiges Verzeichnis: os.makedirs(r"c:pythontest")
7. Erstellen Sie ein einzelnes Verzeichnis: os.mkdir("test")
8. Löschen Sie mehrere Verzeichnisse: os.removedirs(r „c:python“) #Löschen Sie alle leeren Verzeichnisse unter dem letzten Verzeichnis des angegebenen Pfads.
9. Ein einzelnes Verzeichnis löschen: os.rmdir("test")
10. Dateiattribute abrufen: os.stat(file)
11. Dateiberechtigungen und Zeitstempel ändern: os.chmod(file)
12. Betriebssystembefehle ausführen: os.system("dir")
13. Einen neuen Prozess starten: os.exec(), os.execvp()
14. Das Programm im Hintergrund ausführen : osspawnv( )
15. Beenden Sie den aktuellen Prozess: os.exit(), os._exit()
16. Dateiname teilen: os.path.split(r"c:pythonhello.py") - -> ( "c:\python", "hello.py")
17. Split-Erweiterung: os.path.splitext(r"c:pythonhello.py") --> \hello" , ".py")
18. Holen Sie sich den Pfadnamen: os.path.dirname(r"c:pythonhello.py") --> "c:\python"
19. Holen Sie sich der Dateiname: os .path.basename(r"r:pythonhello.py") --> "hello.py"
20. Bestimmen Sie, ob die Datei existiert: os.path.exists(r"c:pythonhello .py") -- > True
21. Bestimmen Sie, ob es sich um einen absoluten Pfad handelt: os.path.isabs(r".python") --> False
22. Bestimmen Sie, ob es sich um ein Verzeichnis handelt : os.path.isdir(r"c :python") --> True
23. Bestimmen Sie, ob es sich um eine Datei handelt: os.path.isfile(r"c:pythonhello.py") --> True
24. Bestimmen Sie, ob es sich um eine Linkdatei handelt: os.path.islink(r"c:pythonhello.py") --> False
25. Ermitteln Sie die Dateigröße: os.path.getsize( Dateiname)
26.**********: os.ismount("c:\") --> True
27. Alle Dateien im Verzeichnis durchsuchen: os.path.walk ()

Das Shutil-Modul arbeitet mit Dateien:
1. Kopieren Sie eine einzelne Datei: shultil.copy(oldfile, newfle)

2. Kopieren Sie den gesamten Verzeichnisbaum: shultil.copytree (r".setup", r".backup")

3 .Löschen Sie den gesamten Verzeichnisbaum: shultil.rmtree(r".backup")

    临时文件的操作:
    1.创建一个唯一的临时文件:tempfile.mktemp() --> filename

    2.打开临时文件:tempfile.TemporaryFile()

    内存文件(StringIO和cStringIO)操作
    [4.StringIO] #cStringIO是StringIO模块的快速实现模块

    1.创建内存文件并写入初始数据:f = StringIO.StringIO("Hello world!")
    2.读入内存文件数据:print f.read() #或print f.getvalue() --> Hello world!
    3.想内存文件写入数据:f.write("Good day!")
    4.关闭内存文件:f.close()

import os
import os.path
import unittest
import time
#import pygame

class PyFileCommonOperatorTest(unittest.TestCase):
  def __init__(self):
    """constructor"""
  
  def test01(self):
    print os.linesep
    print os.sep
    print os.pathsep
    print os.curdir
    print os.pardir
    print os.getcwd()
    print 'unittest here'


if __name__ == "__main__":
  t = PyFileCommonOperatorTest()
  t.test01()

读文件的写法

#读文件的写法:
#读文本文件: 
input = open('data', 'r')#第二个参数是默认的,可以不加
#读二进制文件: 
input = open('data', 'rb')
#读取所有文件内容:
open('xxoo.txt').read()
#读取固定字节
open('abinfile', 'rb').read(100)
#读每行
file_object.readlines()


更多python 文件操作api相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn