新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V6.0版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 541|回复: 1

[模块] 7560 - Python库 AP087【os】内置模块文件操作功能

 关闭 [复制链接]
发表于 2021-8-21 15:48:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

您需要 登录 才可以下载或查看,没有账号?注册

x
Python3  OS 文件/目录方法
, o! t8 T1 s. }* d/ e8 |os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
- k7 d9 N7 v! u  r
序号
方法及描述
1
os.access(path, mode)

// 检验权限模式
2
os.chdir(path)

// 改变当前工作目录
3
os.chflags(path, flags)

// 设置路径的标记为数字标记。
4
os.chmod(path, mode)

// 更改权限
5
os.chown(path, uid, gid)

// 更改文件所有者
6
os.chroot(path)

// 改变当前进程的根目录
7
os.close(fd)

// 关闭文件描述符 fd
8
os.closerange(fd_low, fd_high)

// 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9
os.dup(fd)

// 复制文件描述符 fd
10
os.dup2(fd, fd2)

// 将一个文件描述符 fd 复制到另一个 fd2
11
os.fchdir(fd)

// 通过文件描述符改变当前工作目录
12
os.fchmod(fd, mode)

// 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13
os.fchown(fd, uid, gid)

// 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14
os.fdatasync(fd)

// 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15
os.fdopen(fd[, mode[, bufsize]])

// 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16
s.fpathconf(fd, name)

// 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17
os.fstat(fd)

// 返回文件描述符fd的状态,像stat()。
18
os.fstatvfs(fd)

// 返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
19
os.fsync(fd)

// 强制将文件描述符为fd的文件写入硬盘。
20
os.ftruncate(fd, length)

// 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21
os.getcwd()

// 返回当前工作目录
22
os.getcwdb()

// 返回一个当前工作目录的Unicode对象
23
os.isatty(fd)

// 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24
os.lchflags(path, flags)

// 设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25
os.lchmod(path, mode)

// 修改连接文件权限
26
os.lchown(path, uid, gid)

// 更改文件所有者,类似 chown,但是不追踪链接。
27
os.link(src, dst)

// 创建硬链接,名为参数 dst,指向参数 src
28
os.listdir(path)

// 返回path指定的文件夹包含的文件或文件夹的名字的列表。
29
os.lseek(fd, pos, how)

// 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30
os.lstat(path)

// 像stat(),但是没有软链接
31
os.major(device)

// 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32
os.makedev(major, minor)

// 以major和minor设备号组成一个原始设备号
33
os.makedirs(path[, mode])

// 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34
os.minor(device)

// 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35
os.mkdir(path[, mode])

// 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36
os.mkfifo(path[, mode])

// 创建命名管道,mode 为数字,默认为 0666 (八进制)
37
os.mknod(filename[, mode=0600, device])

// 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
38
os.open(file, flags[, mode])

// 打开一个文件,并且设置需要的打开选项,mode参数是可选的
39
os.openpty()

// 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40
os.pathconf(path, name)

// 返回相关文件的系统配置信息。
41
os.pipe()

// 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42
os.popen(command[, mode[, bufsize]])

// 从一个 command 打开一个管道
43
os.read(fd, n)

// 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44
os.readlink(path)

// 返回软链接所指向的文件
45
os.remove(path)

// 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46
os.removedirs(path)

// 递归删除目录。
47
os.rename(src, dst)

// 重命名文件或目录,从 src 到 dst
48
os.renames(old, new)

// 递归地对目录进行更名,也可以对文件进行更名。
49
os.rmdir(path)

// 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50
os.stat(path)

// 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51
os.stat_float_times([newvalue])

// 决定stat_result是否以float对象显示时间戳
52
os.statvfs(path)

// 获取指定路径的文件系统统计信息
53
os.symlink(src, dst)

// 创建一个软链接
54
os.tcgetpgrp(fd)

// 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55
os.tcsetpgrp(fd, pg)

// 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56
os.ttyname(fd)

// 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
57
os.unlink(path)

// 删除文件路径
58
os.utime(path, times)

// 返回指定的path文件的访问和修改的时间。
59
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

// 输出在文件夹中的文件名通过在树中游走,向上或者向下。
60
os.write(fd, str)

// 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
61
os.path 模块

// 获取文件的属性信息。
62
os.pardir()

// 获取当前目录的父目录,以字符串形式显示目录名。

$ p( a& G1 O& O" t0 ^
$ h( x* z$ i' o
1
os.tempnam([dir[, prefix]])
Python3 中已删除。返回唯一的路径名用于创建临时文件。
2
os.tmpfile()
Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
3
os.tmpnam()
Python3 中已删除。为创建一个临时文件返回一个唯一的路径
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
 楼主| 发表于 2021-11-6 16:48:25 | 显示全部楼层
ps:下面看下python读写、创建文件、文件夹等等
' W( x. d7 y' r7 X6 i1 ]& I0 V
) F* P8 R& B: P7 m( \( u+ {% ?9 ppython中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。2 D% J/ a5 w* d, B: x$ R3 ~

! ?: h& ]( I( L( ^; ~/ e  t+ N得到当前工作目录,即当前Python脚本工作的目录路径:
  1. os.getcwd()
复制代码

0 N! Z# T5 |" V1 T
! `  I3 i. i# J返回指定目录下的所有文件和目录名:
  1. os.listdir()
复制代码

- t# s# l5 |1 Z8 g3 I. y
+ h/ A" l' ^! Y% q) B$ l函数用来删除一个文件:
  1. os.remove()
复制代码
, G; \. y! I6 H4 |
/ t0 X- D" Y9 g7 l
删除多个目录:
  1. os.removedirs(r“c:\python”)
复制代码
5 p# u+ o% E. _& ^1 N0 D1 N$ ?; C

: S& z4 B  \5 |$ X检验给出的路径是否是一个文件:
  1. os.path.isfile()
复制代码
6 U* C. F- b4 y  n
& g# ]4 J# J" s7 Z
检验给出的路径是否是一个目录:
  1. os.path.isdir()
复制代码

# V; @9 F0 e5 t( Q" l
/ e9 S9 [2 ]8 U  g( B: L# W: h判断是否是绝对路径:
  1. os.path.isabs()
复制代码
5 {9 t9 U" ?# ~7 R! H+ l8 S) f5 O
0 u& m2 ]" J7 V1 k: D$ B* Q: X' d
检验给出的路径是否真地存:
  1. os.path.exists()
复制代码
% t4 o% R) Y/ ^' j% A

, T+ {# p) e0 L, ^0 w% n) A; F& C返回一个路径的目录名和文件名:
  1. os.path.split()
复制代码

$ W- [% M! A" k' [1 `' M- p7 y' _eg
  1. os.path.split('/home/swaroop/byte/code/poem.txt')
复制代码
结果:
  1. ('/home/swaroop/byte/code', 'poem.txt')
复制代码

' l3 ^: v9 J3 a6 `! w6 W
$ l) d  a: p8 j, P. c3 C. n! D分离扩展名:
  1. os.path.splitext()
复制代码
2 [+ {2 H2 q! K2 U4 q

+ h4 P- ^, U0 h) S  S6 Y# X获取路径名:
  1. os.path.dirname()
复制代码

- c3 z- h5 e+ m7 v' H0 H# ]; ]* ^7 e$ D  u& C& N' U
获取文件名:
  1. os.path.basename()
复制代码

9 T) a8 W0 h: A: }6 l& k1 v# m- L' k# w
运行shell命令:
  1. os.system()
复制代码

4 a5 D& l5 \5 |  E0 T6 q# H" k- P" a. Y/ P
读取和设置环境变量:
  1. os.getenv()
复制代码
  1. os.putenv()
复制代码
% G, V, R3 M8 h

; h! k$ x) F! o1 D- `3 d给出当前平台使用的行终止符:
  1. os.linesep
复制代码
   Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
& }) F; g& C- J0 |
. ?( }  J% E0 ?: x$ W% i指示你正在使用的平台:
  1. os.name
复制代码
      对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix') j9 O  \+ E) Z/ i! P/ v; P
3 c1 f6 T" I0 g) t
重命名:
  1. os.rename(old, new)
复制代码
- S& x2 c9 I6 k! q( \% y2 K8 @' r- y

8 y0 t9 H# \+ ?3 F8 B' |4 C$ S创建多级目录:
  1. os.makedirs(r“c:\python\test”)
复制代码

" i$ d, P- C# l' \$ x0 |
. x$ d+ v8 I5 D5 e4 K7 w& J& g创建单个目录:
  1. os.mkdir(“test”)
复制代码
  d3 _* d6 g3 z) s

( w- W) g0 T# S5 {; w6 \7 T! C获取文件属性:
  1. os.stat(file)
复制代码
" M& G" b% [: T. y+ U" w
% q( N3 X; d% C) o7 `$ Q
修改文件权限与时间戳:
  1. os.chmod(file)
复制代码

1 `+ f6 J* d. F7 }+ E/ M0 o3 A/ J" e! i* k# j
终止当前进程:
  1. os.exit()
复制代码

+ s) ?" J! R- v9 B/ @9 F- o& ~! f
! a$ m7 ]& B7 D& z2 t1 v% D+ J获取文件大小:
  1. os.path.getsize(filename)
复制代码
4 c  ^* M; X# t; {' j
; ]  T, w: p" s! P  H9 z$ B4 w' i* y# R
文件操作:
& ]1 C9 C6 l4 d' d1 u) T: d0 S
0 W  z% G; m8 W; r& f: o创建空文件
  1. os.mknod("test.txt")
复制代码

7 }% J4 }; Z+ Y- b  b4 a; [直接打开一个文件,如果文件不存在则创建文件
  1. fp = open("test.txt",w)
复制代码
0 S( Q; C/ X& o  {3 f4 I7 X
5 Y; s6 o8 {( @) P4 ]2 o5 t& b' U  ^
关于open 模式:; y  S7 p3 |" r) U9 E
w     以写方式打开,
  |- {' k; ?, @; e) h9 a7 K. Ha     以追加模式打开 (从 EOF 开始, 必要时创建新文件); T- g) y* l' e
r+     以读写模式打开3 J, W5 U5 L. {' ]. t4 X3 _7 f
w+     以读写模式打开 (参见 w )2 U0 L# \$ k% a& u6 m2 V
a+     以读写模式打开 (参见 a )" k  @9 r! |( S' m! j
rb     以二进制读模式打开* Z+ T- s  _6 C
wb     以二进制写模式打开 (参见 w )
) ~0 g. r9 q, n, d5 Y+ tab     以二进制追加模式打开 (参见 a )
! J4 R: R/ p8 s: }4 `2 Grb+    以二进制读写模式打开 (参见 r+ )6 s. m  w1 S1 N2 }
wb+    以二进制读写模式打开 (参见 w+ )
  u: n7 P% ^9 Xab+    以二进制读写模式打开 (参见 a+ )
5 v) D2 f9 [* K' t8 }3 a
4 i2 ?6 m6 P; c0 W9 {& Q2 N
  1. fp.read([size])
复制代码
                    #size为读取的长度,以byte为单位
, M5 S) O4 W% C) n2 P
  1. fp.readline([size])
复制代码
                #读一行,如果定义了size,有可能返回的只是一行的一部分
' I# U4 Z. N. e2 U
: g! T/ n/ ^! v) r: h5 k$ }
  1. fp.readlines([size])
复制代码
               #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
" G5 I! S% `0 `, e1 p+ Z
4 a0 B, F/ q8 _9 `8 O, x9 a1 a
  1. fp.write(str)
复制代码
                     #把str写到文件中,write()并不会在str后加上一个换行符) a1 {, {0 Y6 w3 J8 I
! J- R/ `; v. r
  1. fp.writelines(seq)
复制代码
           #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。/ L: p' v: s. q! S2 I1 P

! Q$ n  F6 I5 h& I: q
  1. fp.close()
复制代码
                       #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError4 e7 D* \7 Y9 o, N% D( l

$ _3 |; z$ n$ Y$ l- ^# T
  1. fp.flush()
复制代码
                                     #把缓冲区的内容写入硬盘2 ]0 f) t3 B- |9 b0 u+ \3 b
& D" C/ O0 W' u& @
  1. fp.fileno()
复制代码
                                     #返回一个长整型的”文件标签“9 T  }5 o0 @  w. h
. Y4 V/ l2 p( b
  1. fp.isatty()
复制代码
                                     #文件是否是一个终端设备文件(unix系统中的). B, Y% e9 S! e" x
1 [: b2 v9 k' a8 ^( A8 E8 J
  1. fp.tell()
复制代码
                                        #返回文件操作标记的当前位置,以文件的开头为原点$ e7 n* {6 Q/ ^+ Z: H1 S
) v( C" L3 ]8 K3 N  d
  1. fp.next()
复制代码
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。2 W' t8 n, u; t+ ~. f  G0 D- w
: ]1 O4 ]( m% N. ]
  1. fp.seek(offset[,whence])
复制代码
             #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。1 U1 R7 \% T7 ~
" ^2 O2 e: S2 z0 T: l3 ]; p
  1. fp.truncate([size])
复制代码
                      #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
9 j" r" E% L! T1 R% @$ H* e$ o% r0 ?- T, U& `( a) P
目录操作:) J- b7 F% ~7 i9 P) O

! _% @; d0 d7 X$ E5 f8 r2 J
  1. os.mkdir("file")
复制代码
                  创建目录
. x: }9 f. M* f' f复制文件:
5 r5 Q9 H, j: a
  1. shutil.copyfile("oldfile","newfile")
复制代码
      oldfile和newfile都只能是文件5 R' `  r8 C& F5 l: g
  1. shutil.copy("oldfile","newfile")
复制代码
           oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
  F$ t# I! D. h  }' f5 P* S复制文件夹:
0 n5 x* W1 K& v$ k
  1. shutil.copytree("olddir","newdir")
复制代码
       olddir和newdir都只能是目录,且newdir必须不存在
2 r% t' x  Y1 \" n7 H0 M重命名文件(目录)
9 B0 M9 ~; A9 p$ p+ r% v1 B
  1. os.rename("oldname","newname")
复制代码
      文件或目录都是使用这条命令
( c  D; `( E* Z7 Q* M6 x移动文件(目录)
' t  v/ G: m* @; i9 T4 s
  1. shutil.move("oldpos","newpos")
复制代码
! b$ D8 W- n' B3 }9 `1 Q# ]
删除文件1 y1 H& O' \( {" V9 ]  j
  1. os.remove("file")
复制代码

4 _9 Q9 q5 X3 d. O删除目录4 k; w2 h7 }9 p! V* h" }
  1. os.rmdir("dir")
复制代码
   只能删除空目录
8 c. ?; M4 s8 r$ l/ m# n5 x
  1. shutil.rmtree("dir")
复制代码
   空目录、有内容的目录都可以删1 W. I  E7 `( m! T1 ?
转换目录; m3 t, A. r/ a  v+ `! O
  1. os.chdir("path")
复制代码
  换路径
  B0 C/ [# q' {% P* E; [( O. g( g" B- \- K
$ c0 J6 D/ c! b! x  S4 |
Python读写文件
8 [0 @, e+ N3 ^8 x+ }/ H  \( \
6 K8 ~* g% J+ H+ j2 c& {% [3 S1.open0 K2 {5 u, S& y2 m
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
4 X0 G2 e9 ~/ N' R7 ?3 c$ Y# f" I/ B1 B1 q  {
  1. file_object = open('thefile.txt')
    % @4 e% Z/ _/ r$ y( b  X
  2. try:
    & ^5 E' z  v% L$ R6 |
  3.    all_the_text = file_object.read( )/ P) k5 G5 L2 R
  4. finally:
    / y( R5 i  ~" N8 ?: o
  5.    file_object.close( )
复制代码

. i: Z6 @2 r9 F" S$ k9 O- ?注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。- x* ^; u- {0 `7 o! V7 c+ [. J+ u
8 v- n$ o# g3 M6 ^4 R5 p
2.读文件/ s# J, R! [; B. ~+ v% e8 v; l( p: G

% t' ?5 P1 T& J1 B1 E读文本文件. Y) q. B8 ^* S& l2 x7 E
  1. input = open('data', 'r')
    . q' d! f3 \9 O2 z  l# l" ^; j
  2. #第二个参数默认为r4 {9 R  j% i7 S3 {
  3. input = open('data')
    + w; Y: [7 r# g
  4. 读二进制文件! J+ W2 {: h; ^: \! T) t
  5. input = open('data', 'rb')
复制代码
% f; ?' Z/ x+ x) U

  O& Z) b3 A3 l& t# i2 y读取所有内容; b/ W/ C% y: ]2 e" P0 `$ t$ }
  1. file_object = open('thefile.txt'): u) B- L0 }6 W
  2. try:" I* C2 e3 ^$ }& X4 _
  3.    all_the_text = file_object.read( )
    3 a  j: r0 i; G( c# t( ?
  4. finally:% J, B- h& \6 U
  5.    file_object.close( )
复制代码
& d" W, U6 n+ M7 N5 k, r$ @- G% Q; g

. k9 r5 z' l: R, b读固定字节
+ ?- F& i' H% P" d
  1. file_object = open('abinfile', 'rb')! k1 h: a' Q0 {* L9 Y7 P
  2. try:
    , U7 b- r( \1 X+ c: i4 s+ Y
  3.   while True:
    - E  x# _* G6 `( Y( r7 T
  4.      chunk = file_object.read(100); `5 ]0 Q4 k0 U3 B: W+ P
  5.     if not chunk:
    0 j& p: z: V4 l: J3 b
  6.       break
    ( h& O/ [/ b) T. L. _
  7.      do_something_with(chunk)( S1 W1 {' O7 @8 z% c# K3 i
  8. finally:
      x. K1 p8 ^* o) P( ?6 h
  9.    file_object.close( )
复制代码
0 E! y8 C2 m  X( x- P* i: b9 Z/ b

) K/ K7 e8 V( G1 w1 U读每行
, ^! k3 q0 n6 q" Y* v  S6 D" f0 ]
  1. list_of_all_the_lines = file_object.readlines( )
复制代码

5 C& ~' D$ E4 G& J. D$ F- _# W
& A+ ~1 ~* q1 Z如果文件是文本文件,还可以直接遍历文件对象获取每行:0 E7 U4 G) t' l3 e4 b! w
  1. for line in file_object:2 Q+ Q; {- ~2 i$ q& E  f* z( m+ m8 B
  2.    process line
复制代码

) t! Q7 f9 g, x- L7 }8 e
$ l& s& [- ]+ ~* t* C3.写文件- F# \. v: k1 ]8 r' `" x/ G

& |7 O' |' j8 P$ X" Z% c; e! G写文本文件, ]0 _" m3 p$ e
  1. output = open('data', 'w')
复制代码
: B1 v1 J0 V4 d* f: n

+ d( F. U# `! C写二进制文件
# f7 l9 T$ T' y8 E+ S
  1. output = open('data', 'wb')
复制代码
- i- T6 T; u" B" X2 T
, O7 U- Y0 M6 W7 _0 m- a
追加写文件
: M* P" ], T7 ?) U$ Y7 e2 S
  1. output = open('data', 'w+')
复制代码

0 Y. b% O+ C* i5 C# ?2 m' V. a* e! k; v3 {6 c$ P4 b
写数据: P. x/ _; ~$ u( K/ `; Z
  1. file_object = open('thefile.txt', 'w')
    7 t* y  m1 _- ^9 J- T( `" P
  2. file_object.write(all_the_text)2 t  m9 b: L. B. T- }& ?% L6 C
  3. file_object.close( )
复制代码

9 d. J3 V- m9 l3 Z  N; l
  u6 l4 b9 W" i) G写入多行5 P+ u  M* N& G- Y. M% R
  1. file_object.writelines(list_of_text_strings)
复制代码

, ~; L1 D( c/ i- i1 A! V
( i4 i/ I' y% Z( m注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
) f% C7 g+ A, x! y3 v' I
. l: C- v2 k( L' O1 i, h3 |在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。3 H* o# B  b; A6 ?4 c
在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:
6 F9 ^* Q/ h0 v- ^1 M
  1. file = open('test.log', 'r')sizehint = 209715200  # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0:    position = file.tell()    lines = file.readlines(sizehint)
复制代码
) ]/ `3 E( c( b: l: @
每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。3 Y) }' c4 [2 W: h

$ ]6 S4 x8 r' o* U+ D: Q. W1 rfile在python是一个特殊的类型,它用于在python程序中对外部的文件进行操作。在python中一切都是对象,file也不例外,file有file的方法和属性。下面先来看如何创建一个file对象:; |2 ?/ K& J+ Z- ]) D

; Y5 G1 f# l% K5 h
  1. file(name[, mode[, buffering]])
复制代码

/ r4 q. @8 V! H; l, G; u$ L6 s: Mfile()函数用于创建一个file对象,它有一个别名叫open(),可能更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是文件的名字。
; V1 n; y$ T( U* r4 C4 wmode是打开的模式,可选的值为r w a U,分别代表读(默认) 写 添加支持各种换行符的模式。用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。由于历史的原因,换行符在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n',用U模式打开文件,就是支持所有的换行模式,也就说‘\r' '\n' '\r\n'都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。2 V0 [' t/ }' c3 A; o
buffering如果为0表示不进行缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的。
! p8 [) W7 D9 s" N- X: ~
. w6 [- C* ], {% V, T1 p, `* Yfile对象有自己的属性和方法。先来看看file的属性。. |* J' q$ i+ x: H* e
! w" J* ?0 J! n$ P8 k. |6 H$ n
closed #标记文件是否已经关闭,由close()改写) z& `( [$ d  z/ j" w: \
encoding #文件编码
9 M9 q6 A! T' T  l0 t4 g: z- P& Fmode #打开模式
2 ~6 W% ?. K0 B7 q  l2 k0 G5 l& jname #文件名
6 L0 A- z6 [) U& U" F2 B9 Jnewlines #文件中用到的换行模式,是一个tuple
0 Y8 h0 W) k' U9 ^% Y; ]9 N/ W: |7 y, Vsoftspace #boolean型,一般为0,据说用于print
4 R1 W/ R6 _# N% ^, g
% u7 P. F/ ]$ F% q/ mfile的读写方法:
; J9 n+ W6 \5 w6 g- [$ j2 J/ Y5 _7 }4 @, w" ^( i
F.read([size]) #size为读取的长度,以byte为单位: b' m$ H2 k5 C2 R4 k8 W6 |
F.readline([size])7 Z& A+ }# W( x' D: R
#读一行,如果定义了size,有可能返回的只是一行的一部分
2 I4 @' @- n% Q! u9 {! n2 qF.readlines([size])
" f! X: W- I2 O3 W#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
; g/ S4 f" J0 q  a% T& ~/ iF.write(str)
) }! x/ g, u: \* g9 o9 T% a#把str写到文件中,write()并不会在str后加上一个换行符) U! f# H, Y4 K% ~) R
F.writelines(seq)
: j1 V9 x( M1 n! i3 b#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。) E* z1 w9 ^: u' ]: N
+ O* u# B5 D& \% |* g$ U
file的其他方法:1 Z# ^2 _7 X7 U' F7 i

3 e& I1 r8 M" |5 lF.close()+ y7 Z  @# [7 r
#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError& v% |3 ~" J/ u3 e) W% }
F.flush()
/ w- y6 K; Y+ S8 S#把缓冲区的内容写入硬盘
: y- [" }+ d: o; mF.fileno()
# W0 d' B1 f' a% @* _#返回一个长整型的”文件标签“' P4 I% O& V: q" V, \: a
F.isatty()
8 e5 G( _; c1 _#文件是否是一个终端设备文件(unix系统中的)6 h. ?4 n; X- H1 X& E9 P1 Y1 t
F.tell()
# q) t8 N+ U9 R# X7 z1 O+ p#返回文件操作标记的当前位置,以文件的开头为原点
& f' E8 j; L( w2 ~0 m3 C. wF.next(). W8 R1 ~2 N8 O4 v  i
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。, T+ \3 q6 R$ {& _' G7 ]
F.seek(offset[,whence])' u+ I' c7 N" A! G+ Z
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
# c2 ^& Y8 o; Q* A* O3 {: U7 QF.truncate([size])/ y+ Q5 o8 u3 O: y" [2 L' S7 m
#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。4 q/ ~4 }2 \1 o2 o% D! K+ y
0 k' t4 @% n; t7 n3 O& j
总结
1 b: U, D$ @! I1 o* T4 y, q
! b1 t# D3 I3 d) e4 B以上所述是小编给大家介绍的python 实现创建文件夹和创建日志文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2026-3-28 13:03 , Processed in 0.091545 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表