本文介绍了用python与文件进行交互的方法,分享给大家,具体如下:
一.文件处理
1.介绍
计算机系统:计算机硬件,操作系统,应用程序
应用程序无法直接操作硬件,通过操作系统来操作文件,进而读/写硬件中的文件。
python打开文件过程:
1
2
3
4
5
6
7
|
#打开 f = open ( 'a.txt' , 'r' ) #通过句柄对文件进行操作 read_f = f.read() #关闭文件 f.close() with open ( 'a.txt' , 'r' ) as f: #不需要关闭 |
1
2
|
f.close() #回收操作系统打开的文件 del f #回收应用程序级的变量 |
2.打开文件的模式
a.打开文本文件
1
2
3
4
5
|
#r,只读模式【默认模式,文件必须存在,不存在则抛出异常】 f = open ( 'a.txt' ,encoding = 'utf-8' ) data1 = f.read() print (f.readline(),end = '') print (f.readlines()) |
1
2
3
|
#w,只写模式【不可读;不存在则创建;存在则清空内容】 f = open ( 'a.txt' , 'w' ,encoding = 'utf-8' ) f.write( 'werf' ) |
1
2
3
|
#a,只追加写模式【不可读;不存在则创建;存在则只追加内容】 f = open ( 'a.txt' , 'a' ,encoding = 'utf-8' ) f.write( 'werf\n' ) |
b.对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式
1
2
3
|
with open ( '1.jpg' , 'rb' ) as f_read: data = f_read.read() print (data) |
1
2
3
|
with open ( 'a.txt' , 'rb' ) as f_read: data = f_read.read().decode( 'utf-8' ) #解码 print (data) |
1
2
|
with open ( 'a.txt' , 'wb' )as f_write: f_write.write( 'adsf' .encode( 'utf-8' )) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
''' 练习,利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file ''' import sys if len (sys.argv)! = 3 : print ( 'usage:cp source_file target_file' ) sys.exit() source_file,target_file = sys.argv[ 1 ],sys.argv[ 2 ] print () with open (source_file, 'rb' )as f_read, open (target_file, 'wb' )as f_write: for line in f_read: f_write.write(line) |
3.文件内光标的移动
1
2
3
4
|
#以文本模式读文件,n代表的是字符的个数 with open ( 'a.txt' , 'r' )as f_read: data = f_read.read( 6 ) print (data) |
1
2
3
4
|
#以b模式读文件,n代表的是字节的个数 with open ( 'a.txt' , 'rb' )as f_read: data = f_read.read( 6 ) print (data) |
1
2
3
4
5
|
# tell:告诉当前光标的位置 with open ( 'a.txt' , 'r' ,encoding = 'utf-8' )as f_read: data = f_read.read( 4 ) data1 = f_read.tell() print (data,data1) |
1
2
3
4
5
|
# seek:移动光标(0:文件开头默认;1:文件当前光标;2:文件末尾) with open ( 'a.txt' , 'r' , encoding = 'utf-8' )as f_read: data = f_read.seek( 3 ) data1 = f_read.read() print (data, data1) |
1
2
3
4
5
6
7
8
9
10
|
# 实现tail功能 import time with open ( 'access.log' , 'rb' )as f_read: f_read.seek( 0 , 2 ) while True : line = f_read.readline() if line: print (line.decode( 'utf-8' ),end = '') else : time.sleep( 1 ) |
4.文件的修改
1
2
3
4
5
6
7
8
9
|
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( 'alex' , 'SB' ) write_f.write(line) os.remove( 'a.txt' ) os.rename( '.a.txt.swap' , 'a.txt' ) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/hantaozi430/p/8486627.html