码迷,mamicode.com
首页 > 编程语言 > 详细

Python-文件处理

时间:2018-03-21 22:02:14      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:har   isp   一个   new   流程   文件的   用法   截断   enc   

技术分享图片

一、文件操作的流程

  1.打开文件

  2.对文件进行操作(读、写、改)

  3.关闭文件

#1.带编码方式读文件
f = open(file=D:/文件操作.txt, mode=r, encoding=gbk)  # 找到并以只读模式打开文件
data = f.read()    # 读取文件并存在内存上
print(data)       # 打印读取的文件
f.close()         # 关闭文件

#2.未知编码方式时二进制只读
f = open(file=D:/文件操作.txt, mode=rb)  # 找到并以只读模式打开文件,以默认的gbk的编码方式读取文件
data = f.read()    # 读取文件并存在内存上
print(type(data), data)       # 打印读取的文件
data2 = data.decode(gbk)  # 需要手动decode 才能显示文本
print(data2)
f.close()         # 关闭文件

二、基本操作

1.文件打开方式

   f=open(‘路径‘,‘模式’)        #1.文件路径       2.什么方式打开文件。

 2. 打开模式:  

  r ——只读模式——》默认模式——》文件必须存在    ——》不存在程序报错

  w——只写模式—— 》 不可读  ——》存在则清空内容——》不存在则创建

  a——追加模式  ——》可读      ——》 存在则只追加内容——》不存在则创建

  r+——读写模式——》先读完文件,追加到文件后面

  w+——写读模式——》先清空文件,再写新的东西

三、读文件

  1.带编码方式读

  2.不带编码方式读

  3.不知道文件编码方式怎么办?

    用chardet包

import chardet

f = open(D:/文件操作.txt, mode=rb)  # 未知文件格式,先通过读二进制方式读取
data = f.read()         # 读取数据放到内存中
result = chardet.detect(data)  # 通过char det方法检测编码方式
print(result)
f.close()

output:技术分享图片

  4.循环文件

f = open(file=D:/文件操作.txt, mode=r, encoding=gbk)  # 找到并以只读模式打开文件
for line in f:
    print(line.strip())       # 一次取一行打印,由于print会自动换行,所以去除一下空格
f.close()

四、写文件

#1.指定编码方式写操作
f = open(D:/文件操作1.txt, mode=w, encoding=utf-8)
f.write(crm)  # 写入字符串
f.close()       # 关闭文件

#2.二进制方式写操作
f = open(D:/文件操作2.txt, mode=wb)
f.write(crm.encode(utf-8))  # 写入字符串
f.close()       # 关闭文件b

五、追加

#1.mode=‘a‘追加操作
f = open(D:/文件操作1.txt, mode=a, encoding=utf-8)
f.write(hahaha)  # 写入字符串
f.close()       # 关闭文件

#2.mode=‘ab‘二进制方式追加操作
f = open(D:/文件操作2.txt, mode=ab)
f.write(hahaha2.encode(utf-8))  # 写入字符串
f.close()       

六、读写模式

f = open(D:/文件操作1.txt, mode=r+, encoding=utf-8)
data = f.read()
print(data)
f.write(\n这是r+的操作)
f.close()

输出:
技术分享图片

 七、写读模式(略:没什么用)

八、文件操作标准化函数:

# def fileno(self, *args, **kwargs): # real signature unknown
# 返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到
#def flush(self, *args, **kwargs): # real signature unknown
# 把文件从内存buffer里强制刷新到硬盘

 

技术分享图片
#flush用法
f = open(f_flush_test.txt, w)
f.write(abcde)
f.flush()     # 把内存内容强制刷入硬盘
print(f.readable())  # 判断是否可读,写操作不可读
f.close()
View Code

# def readline(self, *args, **kwargs): # real signature unknown
# 只读一行,遇到\r or \n为止

 

技术分享图片
#readline用法
f = open(D:/文件操作.txt, r)
data = f.readline()    # 每次读一行,遇到\n或\r停止
print(data)
f.close()
View Code

 

# def readable(self, *args, **kwargs): # real signature unknown
# 判断是否可读

 

# def writable(self, *args, **kwargs): # real signature unknown
# 判断文件是否可写

 

# def seekable(self, *args, **kwargs): # real signature unknown
# 判断文件是否可进行seek操作

 

技术分享图片
# #readable writable seekable 用法
f = open(f_flush_test.txt, r)
#f = open(‘D:/文件操作.txt‘, ‘r‘)
print(read(1)操作, f.read(1))      # 读一个字符
print(read()操作, f.read())      # 此时光标已经在第一个字符,把光标所在之后的内容读入内存
print(readable()操作, f.readable())   # 判断是否可读,写操作不可读
print(writable()操作, f.writable())   # 判断是否可写,读操作不可写
print(seekable()操作, f.seekable())   # 判断光标是否可移动
f.close()
View Code

 

# def seek(self, *args, **kwargs): # real signature unknown
# 把操作文件的光标移到指定位置

# def tell(self, *args, **kwargs): # real signature unknown
# 返回当前文件操作光标位置

# def truncate(self, *args, **kwargs): # real signature unknown
# 按指定长度截断文件
# *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

 九、修改文件

  1、占内存、不占硬盘——全部读到内存再改

#方法1:
#    1.把文本文件整体读进内存。
#    2.通过s.repalce(old,new)把匹配的字符串替换。
#    3.关闭文本文件。
OLD_STR = 哈哈
NEW_STR = 改了

file = D:\文件操作.txt

f = open(file, r+, encoding=gbk) # 打开文件
str = f.read()    # 读取文件到内存
str2 = str.replace(OLD_STR, NEW_STR)
print(str2)
f.close()

 

  2、占硬盘、不占内存——边读边改

#方法1:
#    1.把文本文件整体读进内存。
#    2.通过遍历的方法,把匹配的字符串替换。
#    3.关闭文本文件。

import os

OLD_STR = 哈哈
NEW_STR = 改了

file = D:\文件操作.txt
file_new = %s.new % file
f_new = open(file_new, w,)
f = open(file, r, encoding=gbk)  # 打开文件
for line in f:                      # 遍历每一行

    if OLD_STR in line:
        line = line.replace(OLD_STR, NEW_STR)  # 把旧文件的数据更新
    f_new.write(line)

f.close()
f_new.close()
os.replace(file_new, file)  # 通过替换文件方式更新数据

 

  

 

Python-文件处理

标签:har   isp   一个   new   流程   文件的   用法   截断   enc   

原文地址:https://www.cnblogs.com/AYxing/p/8619776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!