原链接: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. 快递查询 C#

    //电商ID private string EBusinessID = "1257164"; //电商加密私钥,快递鸟提供,注意保管,不要泄漏 private string App ...

  2. Deploy Mysql

    Mysql-5.7.18安装: 安装依赖包: # yum search libaio # yum install libaio 新建用户及组: # groupadd mysql # useradd m ...

  3. 快速理解web语义化

    什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...

  4. NodeJs实现下载Excel文件

    nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / ...

  5. 排序算法Java实现(冒泡排序)

    算法描述:对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行一轮比较和交换后,n个记录中的最大记录将位于第n位:然后对前(n-1)个记录进行 ...

  6. 【Python】 xml解析与生成 xml

    xml *之前用的时候也没想到..其实用BeautifulSoup就可以解析xml啊..因为html只是xml的一种实现方式吧.但是很蛋疼的一点就是,bs不提供获取对象的方法,其find大多获取的都是 ...

  7. New UWP Community Toolkit - XAML Brushes

    概述 上一篇 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾.接下来会针对每个重要更新,结合 SDK 源代码和调用代码详细讲解. 本篇我们 ...

  8. Sum of xor

    Sum of xor jdoj-2160 题目大意:给你一个n,求1^2^...^n. 注释:$n<=10^{18}$. 想法:第一道异或的题.先来介绍一下什么是异或.a^b表示分别将两个数变成 ...

  9. <经验杂谈>介绍Js简单的递归排列组合

    最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...

  10. fetch()函数使用的一些技巧

    最近项目用到了一些es6的知识,其中大篇幅在vue框架中使用了fetch()函数,总结了一些使用的技巧: 一, 1,POST带参数)fetch提交json格式的数据到服务器: //fetch替换vue ...