原链接:https://blog.csdn.net/m0_37745438/article/details/79573414

python提供了一系列方法来对文件进行读取、写入等操作

一、打开文件的方法

python 提供open方法来打开文件

1 open方式打开文件

你在操作的过程中可能会忘了关闭文件而释放资源。那么我们可以通过下面的方式让python

自动关闭释放文件,它就是with ....open

通过这种方法,当执行完with语句后系统将自动释放打开的文件。

二 文件打开模式

对于open(filename,arg) 中文件打开模式arg参数有以下几种方式:

序号 参数 说明
1 r 只读
2 r+ 已读写的方式打开文件
3 w 已写入的方式打开文件,先删除文件原有内容,再写入新的内容。如果文件不存在,则创建一个新文件
4 w+ 已读写的方式打开文件,先删除文件原有内容,再写入新的内容。如果文件不存在,则创建一个新文件
5 a 已写入的方式打开文件,追加文件,不存在则创建一个新的文件
6 a+ 已读写的方式打开文件,追加文件,不存在则创建一个新的文件
7 b 已二进制模式打开文件,可与r,w,a一起结合使用
8 U 支持所有换行符,\n \r  \r\n 都表示换行

三 文件操作函数

文件读操作

1. read()           读取文件中的所有内容,返回结果为字符串<str>

int为读取的长度,在 python 3.x 中read()带参数是读取的为字符长度

python 3.x:

2. readlines()     读取文件的所有内容,返回结果为列表类型<list>

 with open(openfile, 'r') as f:
     a = f.readlines()
     print(type(a))
     print(a)
 结果:
 <class 'list'>
 [']  

3. readlines()    读取文件一行内容

4. tell()             返回当前指针在文件内容中的位置

5.seek(arg)       文件指针,arg参数为整型,代表在文件中的指针;seek(0) 文件开头,seek(1) 当前位置, seek(2)文件末尾

with open(openfile, 'r') as f:
    a = f.readline() # 读取一行内容
    print(a)
    print(f.tell())  # 现在指针的位置
    f.seek(0)   # 返回到文件开始位置
    a = f.readline()  # 又从头开始读了
    print(a)  

  注:seek方法对a, a+模式写文件时是不管用的,因为是追加模式,默认都会指向文件末尾

下面看一个实际应用例子,实现tail效果

 import time
 f = open('/home/ws/test','r')
 f.seek(2)<span style="white-space:pre">       </span># 定位到文件末尾
 while True:
     currline = f.tell()  # 获取当前位置
     line = f.readline()  # 读入内容
     if not line:         # 如果当前无信息
         f.seek(currline) # 继续定位在最末尾
     else:
         print(line)      # 输出内容
     time.sleep(2)  

四 文件写操作

6. write()           写文件,括号中的内容必须为str字符串类型,一次写入到文件中,如果字符串中有\n写入文件时也会换行

7. writeline()      写文件,除了可以写字符串类型外,还支持列表类型

8.truncate()      文件截断操作,将指针后面的所有内容截取掉

文件常用操作技巧:

1. 逐行读取文件内容

with open(openfile, 'r') as f:
    for line in f:
        print(line.strip())  

2. 使用stat 获取文件的信息

通过stat模块可以获取文件的一些基本信息

import os
import stat  

openfile = os.path.dirname(os.path.abspath("__file__")) + "\\README.md"
file_stat = os.stat(openfile) # return tuple
print("file_stat info: " ,file_stat)
print("file_stat mode: " , file_stat.st_mode)
print("check file is dir(stat): ", stat.S_ISDIR(file_stat.st_mode))
print("check file is file (os): ", os.path.isfile(openfile))
print("check file is file (stat):", stat.S_ISREG(file_stat.st_mode))
结果:
<span style="color:#ff6666;background-color: rgb(255, 255, 255);">file_stat info:  os.stat_result(st_mode=33206, st_ino=844424930202057, st_dev=2417903304, st_nlink=1, st_uid=0, st_gid=0, st_size=9, st_atime=1452135600, st_mtime=1452135607, st_ctime=1452135600)
file_stat mode:  33206
check file is dir(stat):  False
check file is file (os):  True
check file is file (stat): True</span>  

stat 模块常用函数:

stat.S_ISREG(st_mode)  == os.path.isfile(filename)  # 判断是否一般文件
stat.S_ISDIR(st_mode)  == os.path.isdir(filename)   # 判断是否为文件夹
stat.S_ISLNK(st_mode)  == os.path.islink(filename)   # 判断是否链接文件
stat.S_ISSOCK(st_mode)  # 判断是否套接字文件
stat.S_ISFIFO(st_mode)  # 判断是否命名管道
stat.S_ISBLK(st_mode)   # 判断是否块设备
stat.S_ISCHR(st_mode)   # 判断是否字符设置

stat 模块常用属性

openfile = os.path.dirname(os.path.abspath("__file__")) + "\\README.md"
file_stat = os.stat(openfile) # return tuple  

print("st_mode:", file_stat.st_mode)    # 权限模式
print("st_ino:", file_stat.st_ino)     # inode number
print("st_dev:", file_stat.st_dev)     # device
print("st_size:", file_stat.st_size)    # 文件的大小,以位为单位
print("uid:", file_stat.st_uid)     # 所有用户的user id
print("gid:", file_stat.st_gid)     # 所有用户的group id
print("st_atime:", file_stat.st_atime)   # 文件最后访问时间
print("st_mtime:", file_stat.st_mtime)   # 文件最后修改时间
print("st_ctime:", file_stat.st_ctime)   # 文件创建时间
结果:
st_mode: 33206
st_ino: 844424930202057
st_dev: 2417903304
st_size: 9
uid: 0
gid: 0
st_atime: 1452135600.2344666
st_mtime: 1452135607.5388844
st_ctime: 1452135600.2344666  

3 从一个文件写入到另一文件

 openfilepath = os.path.dirname(os.path.abspath("__file__"))
 file1 = openfilepath + "\\1.txt"
 file2 = openfilepath + "\\2.txt"
 with open(file1,'r') as f1,open(file2,'a+') as f2:
     f2.write(f1.read())  

Python系列-python文件操作的更多相关文章

  1. Python系列之文件操作、冒泡算法、装饰器、及递归

    文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...

  2. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  3. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  4. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  5. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  6. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  7. Python之常用文件操作

    Python之常用文件操作

  8. python递归、collections系列以及文件操作进阶

    global log 127.0.0.1 local2 daemon maxconn log 127.0.0.1 local2 info defaults log global mode http t ...

  9. Python学习系列之文件操作

    Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的 ...

随机推荐

  1. 【Unity与23种设计模式】责任链模式(Chain of Responsibility)

    GoF中定义: "让一群对象都有机会来处理一项请求,以减少请求发送者与接收者之间的耦合度.将所有的接受对象串联起来,让请求沿着串接传递,直到有一个对象可以处理为止." 举个现实中的 ...

  2. 使用c#对MongoDB进行查询(1)

    1.BsonDocument对象 在MongoDB.Bson命名空间下存在一个BsonDocument类,它是MongoDB的文档对象,代表着MongoDB中不规则数据一条条实体模型.可以使用Bson ...

  3. 关于IPFS的热门问题

      最近小编在公众号收到了一些提及比较高的问题,今天总结一下统一回答 目前网络上有一些对ipfs的解读五花八门,各式各样,有看好的,也有打击的,总之一项新技术诞生之初遇到的问题IPFS都遇到了. 问题 ...

  4. Ubuntu修改密码之后无法登录

    问题:Ubuntu修改密码之后无法登录,停留在登录界面,输入正确的密码之后,画面一闪又回到了登录界面. 解决:ctrl+alt_f1进入终端,输入用户名和密码,$cd /home/userXXX &a ...

  5. generator生成器iterator遍历器和yield

    generator方法()返回一个iterator 使用generator时永远先去调用generator()方法 for of对iterator的调用过程(babel参照) 1,_iterator. ...

  6. python web开发-flask中日志的使用

    Flask使用日志记录的方式: 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用l ...

  7. Gradle-----搭建简单的Gradle项目

    GroupId 项目所在组信息 ArtifactId 项目名称 Version 项目的版本信息

  8. 笔记:Spring Cloud Ribbon 客户端负载均衡

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...

  9. poj-2909-哥德巴赫猜想

    Description For any even number n greater than or equal to 4, there exists at least one pair of prim ...

  10. fail2ban 防止ssh暴力破解

    1.环境 CentOS 7 2.在线安装 yum install -y epel-release yum install -y fail2ban fail2ban 结构 /etc/fail2ban   ...