本文介绍了用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