day9 python学习 文件的操作 读 写 seek

python

文件的操作

1   文件的打开操作:

python plain">文件句柄 = open('文件路径''模式')

f=open('wangyakun','a+',encoding='utf-8')  #文件名,  如果是绝对路径的话要写成  r'c:\user\administrator\'这种形式
后边选择的编码方式要选择已保存的文件保存的编码方式,
f.write('nihao a ')

f.seek(2) seek 这里指的是字节位置如果出现中文就会一个字三个字节位,

count=f.readlines()

print(count)

f.close() #操作系统级别的关闭,这里一定要操作完成后写 免得程序占用内存

2.常用的文件操作:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【不可读;   不存在则创建;存在则只追加内容;】
  • "+" 表示可以同时读写某个文件

    • r+,可读写文件。【可读;可写;可追加】、先读再写会在末尾加,先写在读会覆盖式的添加在前边

    • obj1 = open('filetest.txt', 'r+',encoding='utf-8')

      obj1.write('aaaaa \n') # 这样操作的话他会将原来文件的第一行覆盖,

    • w+,先写再读。【这个方法打开文件会清空原本文件中的所有内容,将新的内容写进去,之后也可读取已经写入的内容】
    • a+,追加模式,可读,不存在则创建,存在则只追加内容
    • rb,wb,ab# "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) 这也是常用的读写方式 f=Open('ni hao','rb')  #注意 它后边不用再写编码方式,因为他是byte型  就是编码方式为utf-8或gbk  所有不用再写

    •                                                                                           #但是为什么其他的要写encoding="utf-8"或”gbk" 因为python3 默认编码方式是UTF-8

                •             python2是ascii

    •                                                                                                   不能用于存储和传输 需要将他转换为其他的格式才(被打开文件的编码格式)可以
    •                                                                                              #

seek:移动光标到指定位置              f.seek(0)将光标移动到最开头,  f.seek(0,2)将光标移动到最后
tell:告诉你当前光标的位置
f=open('wangyakun','a+',encoding="utf-8")

f.write('nihao')

f.seek(0)#因为写完之后指针位置(光标位置,)会到达最后,此时打印会打不出来

#因为光标后边已经没有内容了,所以要将光标前移

print(f.read(),f.tell())#打印的结果,a+追加的意思,可读,这是结果

# 我nihao 8 tell()的意思是当前指针的位置一个汉字3个字节所以是8(字节位)
#还有一点要注意,当有换行时,换行符其实是(\r\n )所以它占两个字符位置

f=open('wangyakun','r+',encoding='utf-8')

for count in f:#用for循环读取文件中的内容

if count.strip():#此用法是去除(不打印)没内容的行 他可以去掉空格换行符 制表符

#因为没内容的行用strip的话就会是False条件不成立,走不下去。

print(count.strip())

读的第三种方式    f.readline()

和  f.readlines()

按照行读,每次执行都会读取下一行内容

f=open('wangyakun','r+',encoding='utf-8')#  我们文件内的内容第一行是enen  得二行才是 nihao  

f.seek(0)

f.readline() # 这是第一次的结果 它现在指的是nihao

print(f.readline()) #打印结果是 nihao 但是打印出的结果直接是 nihao 因为程序是按行来执行的,#现在打印的是第二个数据,所以不能这样打印
直接在第一个f.readline() 那里print就行
f.readlines()

f=open('wangyakun','a+',encoding="utf-8")
list=[]
f.seek(0)
count=f.readlines()
print(count) #打印结果['你是谁\n', 'ni  hao\n', '哈哈'] 可以看到他打印出来的是一个列表

 

f.read()的用法 #如果是f=open("歌曲","rb",encoding="utf-8")
rb 这中形式的话就按照字节位来读取

其他的形式就是以字符来读他()括号里的数字就是它要读的字符位数,如果是6就读前6个字符
f=open('wangyakun','r+',encoding='utf-8')

count=f.read(1) #读取第一个字符

print(count)#打印结果是 网 这里我们可以看到read() 这个括号里的内容是一个一个按字符数据来打印的

读取列表的总内容:

网友

enen

oo

haode

jishi

4.判断文件

print(f.readable())#   判断文件是否可读

print(f.writable())#  判断文件是否可写

w+

先写在读

虽然如此,可以读,但是读的时候刚,光标已经到了最后一位,所以直接读的话 重要

不能读出内容,所以样先将光标移动到f.seek(0)的位置上。

f=open('wangyakun','w+',encoding='utf-8')

f.write('\nni hao\n')

f.write('哈哈')

f.seek(0)

print(f.read())

print(f.read(),f.tell())#打印的结果,a+追加的意思,可读,这是结果

我nihao 8 tell()的意思是当前指针的位置一个汉字3个字节所以是8(字节位)

f=open('wangyakun','r+',encoding='utf-8') 重要

for count in f:#用for循环读取文件中的内容

if count.strip():#此用法是去除去掉空格换行符,制表符,(不打印)没内容的行

#因为没内容的行用strip的话就会是False条件不成立,走不下去。

print(count.strip())

 如何将文件中的数字替换

#1如果修改文件中的内容,打开旧文件,读出内容,修改内容,添加到新的文件中去,然后删除旧的,重命名新的。

f=open('文件',encoding='utf-8')

f2=open('文件.bak','w',encoding='utf-8') 文件.bak 这个一般都是以此命名准备替换原来文件的

for line in f:

# old_content=line.strip()

if '原来'in line:

new_conten=line.replace('原来','新')

else: new_conten=line

f2.write(new_conten)

f.close()

f2.close()

import os

os.remove('文件')

os.rename('文件.bak','文件')

 with的用法

2.With的用法:

文件的打开和关闭:

一般是

with open("文件1",encoding='utf-8') as f,open("文件.bak","w",encoding="utf-8")as f1:

这么用可以打开一个文件也可以打开两个文件,而且用with打开文件不用再在后边写  f.close()这样会免得忘记

 文件可以用for循环去写

文件的写

可以在for循环中去写入内容,因为在文件中写入一行之后,光标就移动到下一行,再写就继续下移,总是停留在最后位置,所以可以循环写入

f2=open('文件','w',encoding='utf-8')

li=['123\n','dasdasd\n','ssssss\n','zzzz\n']#文件.bak 这个一般都是以此命名准备替换原来文件的

for line in li:

f2.write(line)

print(f2.tell())

f2.close()

打印的结果如下:光标随着行行的写入依次往下移动

5

14

22

28

以上是 day9 python学习 文件的操作 读 写 seek 的全部内容, 来源链接: utcz.com/z/386977.html

回到顶部