python文件处理

#写文件
>>> f=open("test.log","w") #"w"写入模式
>>> f.write("test line\n")
10
>>> f.write("test line2")
11
>>> f.close() #操作完毕记得关闭文件!
#读文件
>>> f=open("test.log","r") #"r"只读模式
>>> print(f.read())
test line
test line2
>>> f.close() #关闭文件对象
文件句柄 f = open('文件路径', '模式',encoding='编码') 

文件编码 encoding:

open() 文件是由操作系统打开,如果没有手动设置编码,那么默认操作系统会用自己的编码去打开文件,在linux下是utf-8,windows下是 gbk。

打开模式:

  • r  只读模式(默认),文件必须存在,否则会抛异常
  • w  写入模式,需要注意:若文件已存在,会覆盖掉原来的内容!
  • x  写入模式,若文件已存在,会报异常
  • a  追加。不存在则创建,存在就追加
  • t  文本模式打开 (默认)。 open()函数默认的打开模式是'rt'
  • b  以二进制读文件。对于非文本文件,使用b模式,“b”表示以字节的方式操作
  • +  可读写模式

文件对象的方法:

  • f.close()   回收操作系统打开的文件
  • f.read([size=-1])      size未指定则读取整个文件,读取到的是字符串
    # f.read(10)
    如果文件以t(文本模式)打开,则读取10个字符
    若文件以b(二进制模式)打开,则读取10个字节
    # f.read()
    >>> f = open('a.txt','r')
    >>> data = f.read().strip()
    >>> data
    'test line1\ntest line2'
    >>> print(data)
    test line1
    test line2
    >>> f.close()
  • f.readline([size=-1])    每次读一行内容,所以,读取时占用内存小,比较适合大文件
    >>> f = open('a.txt')
    >>> f.readline()
    'test line1\n'
    >>> f.readline()
    'test line2\n'
    >>> f.readline()
    ''
    >>> f.readline()
    ''
    >>> f.close()
  • f.readlines([size=-1])    读取整个文件所有行,保存在一个列表中,每行作为一个元素
    >>> f=open("a.txt")
    >>> data=f.readlines()
    >>> f.close()
    >>> data
    ['test line1\n', 'test line2\n', '\n'] #读取到的是一个列表
    >>> for line in data:
    ... print(line.strip())
    ...
    test line1
    test line2
  • f.tell()     返回当前文件指针的位置

    >>> f=open('record.txt')
    >>> f.read(5)
    '小客服:小'
    >>> f.tell()
    13

      

  • f.seek(offset,from) 移动光标, 从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
    # cat a.txt
    test line1
    test line2
    >>> f=open("a.txt")
    >>> f.seek(8) #把光标移到第8个字符的后面
    8
    >>> f.tell()
    8
    >>> f.read()
    'e1\ntest line2\n'
    >>> f.close()
  • f.truncate([size=file.tell()])    从文件的首字符开始截断 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除。文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

    >>> f=open('a.txt','r+')  #文件打开必须是可写的,在r+或a或a+模式下测试
    >>> f.truncate(8)
    8
    >>> f.read()
    'test lin'
    >>> f.tell()
    8
    >>> f.close()
  • f.write(str)      将字符串str写入文件,返回写入的字符串长度
  • f.writelines(seq)   向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
    >>> l = ['hello\n','world\n']
    >>> f=open("test.log","w")
    >>> f.writelines(l)
    >>> f.close()
    # cat test.log
    hello
    world

with管理上下文

为了防止文件操作完忘记执行 f.close()来关闭文件,可以使用with 关键字来管理上下文, 当with代码块执行完毕时,内部会自动关闭并释放文件资源。

>>> with open('server.py') as f:
... for i in f:
... print(i.strip())
... #with还支持同时对多个文件的上下文进行管理 >>> with open('a.txt','r') as obj1,open('b.txt','w') as obj2:
... data = obj1.read() # 文件较大时,应使用for循环一行一行的读取, for i in obj1: obj2.write(i)
... obj2.write(data)
...
4

修改文件内容:

import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('test','xxxx')
write_f.write(line)
os.rename('.a.txt.swap','a.txt')
os.remove('a.txt')

把一个文件的内容插入到另一个文件某个指定字段的前面

#!/usr/bin/python3
with open('add.txt','r') as obj1,open('filebeat.yml','r') as obj2:
add_content = obj1.read()
content = obj2.read()
pos = content.index('output.kafka:') contents = content[:pos] + add_content + content[pos:]
with open('filebeat.yml','w') as f:
f.write(contents)

file 文件处理的更多相关文章

  1. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  2. File文件的使用

    线程的停止: 1.停止一个线程一般是通过一个变量来控制 2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成 守护线程:(后台线程):在一个进程中只剩下守护线程, ...

  3. Python学习(16)File(文件)方法

    Python File(文件) 方法 file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读 ...

  4. android内核读取file文件

    内核读取file文件的方法: char* file_read(const char * file_path) { struct file *file = NULL; //保存打开文件的文件指针变量 s ...

  5. Java文件操作二:File文件的方法

    一.文件的判断方法 判断方法 .boolean canExecute()判断文件是否可执行 .boolean canRead()判断文件是否可读 .boolean canWrite() 判断文件是否可 ...

  6. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  7. js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...

  8. file和file文件流

    **io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等. 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行 ...

  9. js获取input file文件二进制码

    <html> <body> <img id="image"src=""/> <br/> <input ty ...

  10. js 图片base64转file文件的两种方式

    js 图片base64转file文件的两种方式 https://blog.csdn.net/yin13037173186/article/details/83302628 //将base64转换为bl ...

随机推荐

  1. A>B等CSS选择器

    这些是CSS3特有的选择器,A>B 表示选择A元素的所有子B元素.与A B的区别在于,A B选择所有后代元素,而A>B只选择一代.另外:没有<的用法. A+B表示HTML中紧随A的B ...

  2. Netty实践与NIO原理

    一.阻塞IO与非阻塞IO Linux网络IO模型(5种) (1)阻塞IO模型 所有文件操作都是阻塞的,以套接字接口为例,在进程空间中调用recvfrom,系统调用直到数据包到达且被复制到应用进程缓冲区 ...

  3. oracle 之 如何链接别人电脑的oracle

    1.首先确保两台电脑是在同一个局域网内,可以通过cm命令窗口 ping 对方电脑的ID,若是没问题则表示可以连接 2.接下来通过配置来首先连接对方的电脑 其实在后面还有一个是否创建新的额服务名的操作, ...

  4. HDU 5245 Joyful(期望)

    http://acm.hdu.edu.cn/showproblem.php?pid=5245 题意: 给出一个n*m的矩阵格子,现在有k次操作,每次操作随机选择两个格子作为矩形的对角,然后将这范围内的 ...

  5. BZOJ 2809: [Apio2012]dispatching(左偏树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2809 题意: 思路:最简单的想法就是枚举管理者,在其子树中从薪水低的开始选起,但是每个节点都这样处理 ...

  6. HDU 5844 LCM Walk(数学逆推)

    http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意: 现在有坐标(x,y),设它们的最小公倍数为k,接下来可以移动到(x+k,y)或者(x,y+k).现 ...

  7. 《深入理解JVM虚拟机》读书笔记

    前言:<深入理解JVM虚拟机>是JAVA的经典著作之一,因为内容更偏向底层,所以之前一直没有好好的阅读过.最近因为刚好有空,又有了新目标.所以打算和<构架师的12项修炼>一起看 ...

  8. 启动tomcat 报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

    [root@localhost META-INF]# systemctl start tomcat Job for tomcat.service failed because the control ...

  9. Could not open ServletContext resource [/WEB-INF/xxx-servlet.xml]

    Could not open ServletContext resource [/WEB-INF/xxx-servlet.xml] 造成这个问题的原因很多,网上的解决思路也很多,比如以下的: http ...

  10. 力扣(LeetCode)461. 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y ...