返回顶部
首页 > 资讯 > 后端开发 > Python >[Python ] python中文件的
  • 299
分享到

[Python ] python中文件的

文件Pythonpython 2023-01-31 07:01:21 299人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

原文地址: Http://blog.163.com/qimeizhen8808@126/ 这女孩写的挺好,有值得学习的地方。   1) 文件的打开和创建,关闭  a)文件的打开和创建 主要有两个open()和file()两个方法。它们的功能

原文地址: Http://blog.163.com/qimeizhen8808@126/ 这女孩写的挺好,有值得学习的地方。 

 1) 文件的打开和创建,关闭

 a)文件的打开和创建
主要有两个open()和file()两个方法。它们的功能是提供了初始化输入/输出(I/O)通用接口.
 
格式:file(name, mode [, buffering]] )
name:文件名称,相对路径和绝对路径都可以。
mode: 表示打开的模式,后面具体的介绍
buffering: 表示访问文件所采用的缓冲方式,其中0表示不缓冲,1表示只缓冲一行数据,> 1表示缓冲区的大小
 
mode模式:
r  以读方式打开
w  以写方式打开 (必要时清空, 没有则创建)
a  以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开
a+ 以读写模式打开
b  打开二进制的文件。可以与 r, w,a, + 结合使用
U  支持所有的换行符号。 “ \r”, “\n”,“\r\n”
 
总结: 
  1)使用 'r' 或 'U' 模式打开的文件必须是已经存在的
  2)使用 'w' 模式打开的文件若存在则首先清空, 然后(重新)创建
  3)以 'a' 模式打开的文件是为追加数据作准备的, 所有写入的数据都将追加到文件的末尾.
举几个简单的示例:
---------r操作----------------------------------------------
>>> p=file("/home/jane/a.t","r")
>>> p.read()
'hello\nhello world\nhello world hello world\n\n'
>>> p.read(-1)  #这里可以看出read()每次打开文件后,只能读取一次
''
>>> p.read(-1)
'hello\nhello world\nhello world hello world\n\n' #这里对-1我不是很明白!文件将被读取直至末尾
>>> p=file("/home/jane/a.t","r")
>>> p.read(2)  #每次读取两个字节
'he'
>>> p=file("/home/jane/a.t","r")
>>> p.read(1)  #每次读取一个字节
'h'
---------r+操作--------
>>> p=file("/home/jane/aa","r+")
>>> p.write("Good")
>>> p.close()
>>> 
这里向aa文件中,写入并追加了good
[jane@h3idan ~]$ tail -f aa
goodabc
aaaabbbbccc
123456777888
---------w操作(清空文件)--------
>>> p=file("/home/jane/aa","w")
>>> p.write("good")
>>> p.write("good")
>>> p.close()
这时监控中断,并且从新查看值的时候,文件被清空,同时写入了两个good
[jane@h3idan ~]$ tail -f aa
goodabc
aaaabbbbccc
123456777888
tail: aa:文件已截断
[jane@h3idan ~]$ tail -f aa
goodgood
---------w+操作(清空文件)--------
>>> p=file("/home/jane/aa","w+")
>>> p.write("earth")
>>> p.close()
清空了文件,并写入了earth
[jane@h3idan ~]$ tail -f aa
goodgoodtail: aa:文件已截断
^C
[jane@h3idan ~]$ tail -f aa
earth
---------a+操作(清空文件)--------
>>> p.close()
>>> p=file("/home/jane/aa","a+")
>>> p.write("good")
>>> p.close()
>>> p=file("/home/jane/aa","a+")
>>> p.write("good")
>>> p.close()
>>> 
写入并追加文件
[jane@h3idan ~]$ tail -f aa
earthgoodgood
 
需要思考:
w和w+的区别,w:写入并清空,w+读写并清空,这地方却没有明确看出运行时有什么区别!
r+和a+的区别: 他们都是读取并写入,a+可以追加(末尾加),但是r+是加在最前面
 
b)文件的关闭
close :FileObject.close() 关闭打开的文件对象
 
(2)文件的内建方法:
文件方法可以分为四类: 输入, 输出, 文件内移动, 以及杂项操作。如下表--文件对象的内建方法: 
file.close()--关闭文件
file.fileno()--返回文件的描述符(file descriptor ,FD, 整数值)
file.flush()--刷新文件的内部缓冲区
file.isatty()--判断 file 是否是一个类 tty 设备
file.next()--返回文件的下一行
file.read(size=-1)---从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读取剩余的所有字节, 然后作为字符串返回
        上述定义不是很好理解,不如这个来的好:size: 读出文件的前 [size] 个字符 , 并输出给字符串,此时文件的指针指向 size 处
file.readline(size=-1)---从文件中读取并返回一行(包括行结束符), 或返回最大 size个字符
file.readlines(sizhint=0)--读取文件的所有行并作为一个列表返回(包含所有的行结束符);
file.seek(off, whence=0)--在文件中移动文件指针, 从 whence ( 0 代表文件其始, 1 代表当前位置, 2 代表文件末尾)偏移 off 字节
file.write(str)---向文件写入字符串
file.writelines(seq)---向文件写入字符串序列 seq
 
1)文件读取
read() 方法用来直接读取字节到字符串中, 最多读取给定数目个字节. 如果没有给定 size参数(默认值为 -1)或者 size 值为负, 文件将被读取直至末尾.
readline() 方法读取打开文件的一行(读取下个行结束符之前的所有字节). 然后整行,包括行结束符,作为字符串返回.
readlines() 方法它会读取所有(剩余的)行,然后把它们作为一个字符串列表返回. 
eg: 
>>> p=file("/home/jane/a.t","r")
>>> p.read()
'hello\nhello world\nhello world hello world\n\n'
>>> p=file("/home/jane/a.t","r")
>>> p.readline()
'hello\n'
>>> p=file("/home/jane/a.t","r")
>>> p.readlines()
['hello\n', 'hello world\n', 'hello world hello world\n', '\n']
>>> 
我的a.t文件内容为: 
hello
hello world
hello world hello world
 
2)文件写入
write() 方法它把含有文本数据或二进制数据块的字符串写入到文件中去.
writelines() 方法是针对列表的操作, 它接受一个字符串列表作为参数, 将它们写入文件. 行结束符并不会被自动加入, 所以如果需要的话, 你必须在调用writelines()前给每行结尾加上行
 
结束符.
eg: 
-----write()------
>>> p=file("/home/jane/aa","w+")
>>> p.write("hello world")
>>> p.close()
>>> 
这是aa文件的内容为:
[jane@h3idan ~]$ tail -f aa
hello world
-----writelines()------
>>> p=file("/home/jane/aa","w+")
>>> p.writelines(["a","b","c","d"])
>>> p.close()
>>> 
这时候aa文件内容为:
[jane@h3idan ~]$ tail -f aa
abcd
 
3)内容查找和替换
文件的查找和替换是和循环相关的,给出个题目:a)计算a.t中所有hello的数目,b)将所有的hello 替换成good
a.t的文档内容为:
[jane@h3idan ~]$ cat a.t 
hello
hello world
hello world hello world
【a解答】
#!/usr/bin/python
# n is hello number
# i is hello number in eachline
import re
a=file("/home/jane/a.t","r")
n=0
for i in a.readlines():
        p=re.findall("hello",i)
        print p
        if len(p)>0:
                n=n+len(p)
print n
a.close()
 或者
#!/usr/bin/Python
import re
a=file("/home/jane/a.t","r")
n=0
for i in a.readlines():
        str=r"hello"
        p=re.findall(str,i)
        print p
        if len(p)>0:
                n=n+len(p)
print n
a.close()
 
【b解答】
#!/usb/bin/python
import re
a=file("/home/jane/a.t","r")
b=file("/home/jane/a2.t","w")
for i in a.readlines():
        b.write(i.replace("hello","good"))
a.close()
b.close()
 
[jane@h3idan ~]$ cat a2.t 
good
good world
good world good world
 
4)其他 
seek(off, whence=0) 方法可以在文件中移动文件指针到不同的位置
next():FileObject.next()返回当前行,并将文件指针到下一行
 
(3)目录操作
对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主要接口. os 模块实际上只是真正加载的模块的前端, 而真正的那个"模块"明显要依赖与具体的
 
操作系统. 
os的功能:对进程和进程运行环境进行管理,os 模块还负责处理大部分的文件系统操作, 应用程序。
os.path的功能:可以完成一些针对路径名的操作. 它提供的函数可以完成管理和操作文件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作.对
a)os对目录的操作:
mkdir(path[,mode=0777])----创建目录
makedirs(name, mode=511)-----创建多层目录, 
rmdir(path)------删除目录
removedirs(path)----删除多层目录
listdir(path)----列出指定目录的文件
getcwd() --- ---返回当前工作目录
chdir(path)-----改变当前工作目录
walk(top,topdown=True, onerror=None)---生成一个目录树下的所有文件名
chroot()----改变当前进程的根目录
 
示例:
****** ****mkdir()****************
>>> import os
>>> os.mkdir("/home/jane/qi",775)   
>>> os.mkdir("/home/jane/qi2",0777)  #这里的mode=0777(默认mode),一开始没有太明白,后来突然想起,应该是umask的原因,linux中目录的默认umask是002,因此这里要是创建的具
 
有缺省权限的目录(775),所以mode-=0777 不缺定理解是否正确!
结果为:
dr-----r-t. 2 jane jane 4096  8月 16 02:55 qi
drwxrwxr-x. 2 jane jane 4096  8月 16 02:56 qi2
*****makedirs()****************
>>> os.makedirs("/home/jane/qi3/aa",511)    
[jane@redhat aa]$ pwd
/home/jane/qi3/aa
[jane@redhat aa]$ ll -d
drwxrwxr-x. 2 jane jane 4096  8月 16 03:15 .   # 可以看出被创建的目录也是具有775的权限的
[jane@redhat aa]$
help(makedirs)的帮助文档,显示是511这个我不是很明白?
makedirs(name, mode=511)
    makedirs(path [, mode=0777])
********* 其他**********
>>> os.rmdir("/home/jane/qi")
>>> os.removedirs("/home/jane/qi3/aa")
>>> os.listdir("/home/jane/qimeizhen")
['.test4.py.swp', '4.py', '.11.py.swp', 'test1.py', 'q.py', '1.py', '6.py', 'raw.py', '7.py', '5.py', 'for.py', '9.py', 'test2.py', 'test3.py', '3.py', '10.py', '2.py', 
 
'8.py']
>>> os.getcwd()
'/home/jane'
>>> os.chdir("/home/jane/qimeizhen")
>>> os.getcwd()
'/home/jane/qimeizhen'
   
b)os对文件的操作
remove()/unlink() --- 删除文件
rename()/renames()---重命名文件
**********rename()and remove***************
>>> p=file("/home/jane/aa","w")
>>> p.write("hello world")
>>> p.close()
>>> os.rename("/home/jane/aa","/home/jane/ab")
 
c)os访问/权限
access()----------检验权限模式
chmod()-----------改变权限模式
chown()/lchown()-----改变 owner 和 group ID/功能相同, 但不会跟踪链接
umask()-------设置默认权限模式
 
d)os文件描述符操作
open()---底层的操作系统 open (对于文件, 使用标准的内建 open() 函数)
read()/write()---根据文件描述符读取/写入数据
dup()/dup2()----复制文件描述符号/功能相同, 但是是复制到另一个文件描述符设备号
makedev()-----从 major 和 minor 设备号创建一个原始设备号
 
 
e) 目录的遍历
方法有三种:
    递归函数
    Os.path.walk() 函数
    Os.walk() 函数
 
**************************递归函数遍历**************************************
#!/usr/bin/python
#encoding=utf-8
#递归遍历目录(传统方法)
import os
def VisitDir(path):
    li=os.listdir(path)
    for p in li:
        pathname=os.path.join(path,p)
        if not os.path.isfile(pathname):
            VisitDir(pathname)
        else:
            print pathname
 
if __name__=="__main__":
    path="/home/jane/qimeizhen"
    VisitDir(path)
~                                                                                 
**************************os.path.walk()函数**************************************
格式: walk(top, func, arg)
? 说明:
? top: 要遍历的目录树
? Func: 表示回调函数
? arg: 参数元组
------------------
#!/usr/bin/python
#encoding=utf-8
#使用os.path.walk遍历
import os, os.path
def visitDir(arg, dirname, names):
        for filepath in names:
                print os.path.join(dirname,filepath)
 
 
if __name__ == "__main__":
        path = r"/home/jane/qimeizhen"
        os.path.walk(path, visitDir, ())
*******************************Os.walk() 函数******************************************************
格式: os.walk(top, topdown= True, onerror=None)
 top: 需要遍历的目录树路径
 topdown: =True 表示首先返回目录中的文件,然后在遍历子目录; =False 时,首先遍历目录的子目录,然后遍历目录文件,最后返回根目录文件
 Onerror=None: 是默认值,忽略遍历中出现的错误,否则更具自定义函数输出异常
 
#!/usr/bin/python
#encoding=utf-8
#使用os.walk遍历
import os
def VisitDir(path):
        for root,dirs,files in os.walk(path):
                for filespath in files:
                        print os.path.join(root,filespath)
 

--结束END--

本文标题: [Python ] python中文件的

本文链接: https://lsjlt.com/news/191378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [Python ] python中文件的
    原文地址: http://blog.163.com/qimeizhen8808@126/ 这女孩写的挺好,有值得学习的地方。   1) 文件的打开和创建,关闭  a)文件的打开和创建 主要有两个open()和file()两个方法。它们的功能...
    99+
    2023-01-31
    文件 Python python
  • python怎么读取文件夹中的文件
    读取文件夹中的文件可以使用Python的os模块和glob模块。以下是两种常用的方法: 方法一:使用os模块的listdir函数 i...
    99+
    2024-02-29
    python
  • Python中__init__.py文件
    在Python中每次创建一个package后都会自动生成一个 __init__.py'空文件;该文件的作用是:声明我们当前创建的文件夹(包)是一个**Python模块**,在Python中每一个包中必须有一个__init__ .py文件. ...
    99+
    2023-01-31
    文件 Python py
  • Python中 文件处理
    在文件处理当中,只有read默认是以字符为单位,其他方法均已字节为单位. def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None,...
    99+
    2023-01-31
    文件 Python
  • python 中目录、文件
    python中对文件、文件夹的操作需要涉及到os模块和shutil模块。创建文件:1) os.mknod("test.txt")       创建空文件2) open("test.txt",w)           直接打开一个文件,如果文...
    99+
    2023-01-31
    文件 目录 python
  • python logging输入文件中文
    Python版本3.6 解决方法很简单,在定义Filehandler时指定encoding就好了 import logging file_hanlder = logging.FileHandler(filename='exampl...
    99+
    2023-01-31
    中文 文件 python
  • python的文件类型、python的变
    python的文件类型 1、源码文件:用.py结尾,有python解释器,不需要编译2、字节码文件:python 源码文件经编译后生成的扩展名为 .pyc 的二进制文件源码文件[root@centos7-3 python]# cat 1.p...
    99+
    2023-01-31
    文件类型 python
  • Python文件
    1.文件读模式 r f = open("helloworld", 'r', encoding="utf-8") 文件句柄: "helloworld" 表示读的文件的文件名, 'r' 代表读模式, encoding="utf-8" 表示字符...
    99+
    2023-01-30
    文件 Python
  • python 文件
    #close是通常选项。调用close会终止外部文件的连接。 #写进文件myfile = open('myfile.txt', 'w')myfile.write('hello textfile\n')myfile.write('goo...
    99+
    2023-01-31
    文件 python
  • 详解Python中的文件操作
    1.能调用方法的一定是对象,比如数值、字符串、列表、元组、字典,甚至文件也是对象,Python中一切皆为对象。 str1 = 'hello' str2 = 'world' str3 = ' '.j...
    99+
    2022-06-04
    详解 操作 文件
  • Python中__init__.py文件的作用
    目录1 init文件夹图标2 init.py导入包方式2.1 单个导入2.2 批量引入(定义__all__用来模糊导入)3 实例4 其他常见问题4.1 使用__init__.py文件...
    99+
    2024-04-02
  • python中读取文件的read、rea
       #读取文件所有内容,返回字符串对象,python默认以文本方式读取文件,遇到结束符读取结束。 fr = open('lenses.txt')read = fr.read()print(type(read),read)#读取文件中的一...
    99+
    2023-01-30
    文件 python rea
  • python中的pyc文件是什么
    目录基本说明基本说明 pyc 文件是 Python 编译过的字节码文件。当你运行一个 Python 程序时,Python 解释器首先将源代码(通常是 .py 文件)编译成字节码。 这...
    99+
    2023-05-17
    python pyc pyc 文件
  • python中去掉文件的注释
    import sysimport rePY_PATTERN = re.compile(    r"""     \s*\#(:[^\r\n])*     | \s*__(:[^\r\n]*)     | "{3}(:\\.|[^\\])*"...
    99+
    2023-01-31
    注释 文件 python
  • python中关于文件的操作
    今天让我们来一起学习一下python中关于文件的操作吧:先看看以下如果打开文件:#open()打开文件的方法:r参数只能以读的方式打开文件,不能写=(,,=)data=.read()(data) ...
    99+
    2023-01-31
    操作 文件 python
  • 【Python】使用Python读取JSON文件中的内容
    文章目录 一、JSON文件简介二、借助Python处理JSON文件1、读取字典类型的JSON文件2、读取列表类型的JSON文件3、封装读取JSON文件的函数 一、JSON文件简介...
    99+
    2023-08-31
    python json
  • python 发送中文邮件
    #!/usr/bin/python#coding:utf-8#导入smtplib和MIMEText import smtplibfrom email.Header import Headerfrom email.MIMEText impor...
    99+
    2023-01-31
    中文 邮件 python
  • python中读取文本文件txt
    文件创建 f = open(localDirName, 'w')f.write("something\n")f.close() 如果文件不存在就是创建,如果文件存在就是打开操作 文件对象创建 ...
    99+
    2023-10-25
    python 开发语言 Powered by 金山文档
  • python 如何获取文件夹中的全部文件
    目录python 如何获取文件夹中的全部文件1 os.listdir()2 glob glob.glob()glob.iglob()自然排序PS:Python 获取文件夹下...
    99+
    2023-01-07
    python获取文件夹文件 python获取文件夹所有文件 python获取文件夹全部文件
  • python文件的读取
    python文件的读取 1.文件的读取1.read() 读取整个文件2.readline() 每次读取一行文件3. readlines() 读取文件的所有行 2.文件的写入1.以"x"方式...
    99+
    2023-09-01
    python 数据分析 pandas numpy 文件读取
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作