菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python3 File(文件) 方法

open() 方法

Python open() 方法用于打开一个文件,并返回文件对象。

在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

open(file, mode='r')

完整的语法格式为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

mode 参数有:

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(Python 3 不支持)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

默认为文本模式,如果要以二进制模式打开,加上 b

file 对象

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:

序号方法及描述
1

file.close()

关闭文件。关闭后文件不能再进行读写操作。

2

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

5

file.next()

Python 3 中的 File 对象不支持 next() 方法。

返回文件下一行。

6

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

7

file.readline([size])

读取整行,包括 "\n" 字符。

8

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

9

file.seek(offset[, whence])

移动文件读取指针到指定位置

10

file.tell()

返回文件当前位置。

11

file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。

12

file.write(str)

将字符串写入文件,返回的是写入的字符长度。

13

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

AI 思考中...

7 篇笔记 写笔记

  1. #0

    领悟悟悟

    437***[email protected]

    126

    检索指定路径下后缀是 py 的所有文件:

    #!/usr/bin/python3
    import os
    import os.path
    #path = 'D:/UC/'
    ls = []
    def getAppointFile(path,ls):
     fileList = os.listdir(path)
     try:
     for tmp in fileList:
     pathTmp = os.path.join(path,tmp)
     if True==os.path.isdir(pathTmp):
     getAppointFile(pathTmp,ls)
     elif pathTmp[pathTmp.rfind('.')+1:].upper()=='PY':
     ls.append(pathTmp)
     except PermissionError:
     pass
    def main():
     while True:
     path = input('请输入路径:').strip()
     if os.path.isdir(path) == True:
     break
     getAppointFile(path,ls)
     #print(len(ls))
     print(ls)
     print(len(ls))
    main()

    领悟悟悟

    437***[email protected]

    9年前 (2017年08月03日)
  2. #0

    f123wk

    f12***@xxx.com

    65

    获取文件后缀:

    def getfile_fix(filename):
     return filename[filename.rfind('.')+1:]
    print(getfile_fix('runoob.txt'))

    f123wk

    f12***@xxx.com

    9年前 (2017年10月09日)
  3. #0

    RyenToretto

    951***[email protected]

    64

    用户输入"xxx.txt"类文档文件名

    用户输入被替换的"待替换字"

    用户输入替换目标"新的字"

    用户判断是否全部替换 yes/no

    def file_replace(file_name, rep_word, new_word):
     f_read = open(file_name)
     content = []
     count = 0
     for eachline in f_read:
     if rep_word in eachline:
     count = count+eachline.count(rep_word)
     eachline = eachline.replace(rep_word, new_word)
     content.append(eachline) 
     decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
     % (file_name, count, rep_word, rep_word, new_word))
     if decide in ['YES', 'Yes', 'yes']:
     f_write = open(file_name, 'w')
     f_write.writelines(content)
     f_write.close()
     f_read.close()
    file_name = input('请输入文件名:')
    rep_word = input('请输入需要替换的单词或字符:')
    new_word = input('请输入新的单词或字符:')
    file_replace(file_name, rep_word, new_word)

    RyenToretto

    951***[email protected]

    9年前 (2017年10月12日)
  4. #0

    HantCoCo

    zco***@163.com

    52

    在上面的例子中,write(),read() 方法默认是写入到当前 .py 同文件夹下面的,此外 w+ 的使用方法:不能直接 write() 后,在进行读取,这样试读不到数据的,因为数据对象到达的地方为文件最后,读取是向后读的,因此,会读到空白,应该先把文件对象移到文件首位

    f = open("forwrite.txt", "w+",encoding='utf-8')
    f.write("可以 ,你做的很好! 6666") # 此时文件对象在最后一行,如果读取,将读不到数据
    s=f.tell() # 返回文件对象当前位置
    f.seek(0,0) # 移动文件对象至第一个字符
    str=f.read()
    print(s,str,len(str))

    HantCoCo

    zco***@163.com

    9年前 (2018年02月05日)
  5. #0

    fatcheung

    134***[email protected]

    264

    看上面分享的笔记,有个大佬打开文件然后没有关闭。。。

    一般来说推荐以下方法:

    #写
    with open('test.txt', 'w', encoding='utf-8') as f:
     f.write('test')
    #读
    with open('test.txt', 'r', encoding='utf-8') as f:
     f.readlines()

    执行完自动close,避免忘记关闭文件导致资源的占用。

    fatcheung

    134***[email protected]

    8年前 (2018年02月23日)
  6. #0

    由于文件读写时都有可能产生 IOError,一旦出错,后面的 f.close() 就不会调用。所以,为了保证无论是否出错都能正确的关闭文件,可以使用 try...finally 来实现:

    try:
     f = open('/path/to/file', 'r')
     print(f.read())
    finally:
     if f:
     f.close()
    7年前 (2019年07月07日)
  7. #0

    小花花

    124***[email protected]

    48

    文本中替换字符串:

    """replace strings in text"""
    import os
    def Replace(file_name, rep_word, new_word):
     with open(file_name) as f:
     content = []
     count = 0
     for eachline in f:
     if rep_word in eachline:
     count += eachline.count(rep_word)
     eachline = eachline.replace(rep_word, new_word)
     content.append(eachline)
     decide = input('文件 {0} 中共有{1}个【{2}】\n您确定要把所有的【{3}】替换为【{4}】吗?\n【YES/NO】:'.format\
     (file_name, count, rep_word, rep_word, new_word))
     if decide in ['YES', 'Yes', 'yes']:
     with open(file_name, 'w') as f:
     f.writelines(content)
     print('Succeed!')
     else:
     print('Exit!')
    if __name__ == '__main__':
     while True:
     file_name = input('请输入文件名:')
     if file_name in os.listdir():
     rep_word = input('请输入需要替换的单词或字符:')
     new_word = input('请输入新的单词或字符:')
     Replace(file_name, rep_word, new_word)
     break
     else:
     print('Do not find such a file {}'.format(file_name))

    小花花

    124***[email protected]

    7年前 (2019年07月08日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /