1.文件操作

  把文件打开

open 打开
f = open ('文件路径',mode='模式',encoding='编码格式')
#打开一个文件操作的时候取到的是一个句柄

  读取的方法

. read()      将文件中的内容全部读取出来. 弊端: 占内存.如果文件过大,容易导致内存崩溃
. read(n) 默认:读去文件内容全部read(n) 读取n个字符
. readline() 一次读取一行数据 , 注意每次读出来的数据都会有一个\n 需要使用strip()去空格
. readlines() 读取全部. 返回列表,也容易出现内存崩溃的问题,不建议使用 for line in f: 每次读取一行内容
   print(line.strip())

  1.  只读( r , rb)    读取文件的相关操作

     rb. 读取出来的数据是bytes类型, 在rb模式下, 不能选择encoding字符集

     rb的作用: 在读取非文本文件时,比如读取MP3.图像. 视频等信息的时候就需要用rb. 因为这种数据没办法直接显示出来

  2.  只写(w , wb)

     w 写入,只写,如果没有文件会创建文件,文件存在会清空文件,再写入新的内容

     wb 模式下,可以不指定打开文件的编码.但是在写文件的时候必须将字符串转化成utf-8的bytes数据

  3.  追加(a ,ab)

     追加模式下,写入的内容会追加在文件的末尾. 追加写读所有带b的操作就是对bytes进行操作, 主要用于非文本文件的时候比如音频 图片 视频rbwb就适用这个

   可用于断点续传.

     a模式也可以创建文件

  4.  读写 (r+ , r+b)

     读写模式必须是先读,因为默认光标是在开头的

     r+ 模式下必须先读取再写入

  5.  写读 (w+ , w+b)

     先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,不常用

  6.  写读(追加 写读)a+

     a+模式下,不论是先读还是后读,都是读取不到数据的,因为追加之后光标在末尾,如果需要读取数据要移动光标seek

二.文件操作中关于文件句柄的相关操作

1. seek() 移动光标

seek:两个参数
1. 表示偏移量
2. 从xxx开始偏移, 默认0, 开头 1, 当前位置 2, 末尾

    f.seek(0) 移动到开头

  f.seek(0, 2) 移动到末尾, seek的第二个参数表示的是从哪个位置进行偏移, 默认是0, 表示开头, 1表示当前位置 2表示结尾

2. tell()返回光标所在的位置

print(f.tell())

3. truncate() 截断文件

f = open("文件1", mode="w", encoding="utf-8")
f.write("哈哈") # 写入两个字符
f.seek(3) # 光标移动到3, 也就是两个字中间
f.truncate() # 删掉光标后面的所有内容
f.close() f = open("文件1", mode="r+", encoding="utf-8")
content = f.read(3) # 读取12个字符
f.seek(4)
print(f.tell())
f.truncate() # 后面的所有内容全部删掉
# print(content)
f.flush()
f.close()

三.文件修改

文件修改的步骤

  1.先从文件中读取数据

  2.把要修改的内容修改

  3.写入新文件

  4.删除旧文件

  5.给新文件改名

# 导入os模块  os表示操作系统
import os # f = open("夸一夸123", mode="r", encoding="utf-8")
# f2 = open("夸一夸123_副本", mode="w", encoding="utf-8") # with会自动的帮我们关闭文件的链接
with open("夸一夸123", mode="r", encoding="utf-8") as f, \
open("夸一夸123_副本", mode="w", encoding="utf-8") as f2: for line in f:
if "好人" in line:
line = line.replace("好人", "sb")
f2.write(line) # time.sleep(3) # 程序暂停3秒 这里让程序暂停就是为了直观的显示功能,计算机处理速度过快 看不出来 # 删除原来文件
os.remove("夸一夸123") # 重命名副本为原来的文件名
os.rename("夸一夸123副本", "夸一夸123")

一个重要的练习:

名字  数量 价格  数量
香蕉  1 85  50
苹果 2 60 30 编号,名称,价格
1,香蕉,1,85
2,苹果,2,6
要想获得这些数据 f = open("水果.txt", mode="r", encoding="utf-8") lst = []
for line in f: # 1,香蕉,1.85,50
dic = {} # 每行都是一个字典
line = line.strip() # 去掉空白 \n 1,香蕉,1.85,50
a, b, c, d = line.split(",") # [1, 香蕉, 1.85, 50]
dic['id'] = a
dic['name'] = b
dic['price'] = c
dic['totle'] = d
lst.append(dic) print(lst) # f = open("水果.txt", mode="r", encoding="utf-8")
# line = f.readline().strip() # 第一行内容, 编号,名称,价格,数量,哈哈
# h,i,j,k = line.split(",")
# lst = []
# for line in f: # 1,香蕉,1.85,50
# dic = {} # 每行都是一个字典
# line = line.strip() # 去掉空白 \n 1,香蕉,1.85,50
# a, b, c, d = line.split(",") # [1, 香蕉, 1.85, 50]
# dic[h] = a
# dic[i] = b
# dic[j] = c
# dic[k] = d
# lst.append(dic)
#
# print(lst) f = open("水果.txt", mode="r", encoding="utf-8")
line = f.readline().strip() # 第一行内容, 编号,名称,价格,数量,哈哈
title = line.split(",") # [编号,名称,价格,数量,哈哈]
lst = []
i = 0 for line in f: # 1,香蕉,1.85,50
dic = {} # 每行都是一个字典
line = line.strip() # 去掉空白 \n 1,香蕉,1.85,50
data = line.split(",") # [1, 香蕉, 1.85, 50] for i in range(len(title)):
dic[title[i]] = data[i] lst.append(dic) print(lst)

python--中的文件操作的更多相关文章

  1. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  2. python学习之【第十一篇】:Python中的文件操作

    1.前言 在Python中,对文件的操作主要遵循以下流程: 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 2.打开文件 使用open函数,可以打开一个已经存在的文件,或 ...

  3. 【Python】解析Python中的文件操作

    目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...

  4. 说说Python 中的文件操作 和 目录操作

    我们知道,文件名.目录名和链接名都是用一个字符串作为其标识符的,但是给我们一个标识符,我们该如何确定它所指的到底是常规文件文件名.目录名还是链接名呢?这时,我们可以使用os.path模块提供的isfi ...

  5. 2018.8.6 Python中的文件操作

    前言: 使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种操作了,根据打开方式的不同能够执行的操作也会有相应的差异. 打 ...

  6. Python 中关于文件操作的注意事项

    文件操作 #打开文件 f = open('要打开的文件路径',mode = 'r/w/a', encoding = '文件原来写入时的编码') #操作 data = f.read() #读取 f.wr ...

  7. [19/10/16-星期四] Python中的文件操作

    一.打开文件 # open(file, mode='r', buffering=-1, encoding_=None, errors=None, newline=None, closefd=True, ...

  8. python中的文件操作

    文件操作时,有'r','w','a'不同的操作类型,其中'r'只能读文件,seek(),tell()函数定位读的起始地方.'w'会清空文件内容然后写文件,seek(),tell()函数定位写的起始地方 ...

  9. python中的文件操作(2)

    a+,w+,r+的特点: r+:r+模式允许读和写,当对文件句柄只进行写操作时,tell(),seek()为写操作的‘指针’(也就是写到seek()处). 当只进行读操作时,tell(),seek() ...

  10. python中的文件操作小结2

    ''' #-----------文件修改---------- f=open("test_1",'r',encoding="utf-8") f2=open(&qu ...

随机推荐

  1. RAD XE8

    http://community.embarcadero.com/index.php/blogs/entry/rad-studio-2015-roadmap http://www.embarcader ...

  2. MyBatis 动态SQL注意事项

  3. 什么是2MSL

    [什么是2MSL] MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃.因为tcp报文( ...

  4. Leetcode:Add Two Numbers分析和实现

    Add Two Numbers这个问题的意思是,提供两条链表,每条链表表示一个十进制整数,其每一位对应链表的一个结点.比如345表示为链表5->4->3.而我们需要做的就是将两条链表代表的 ...

  5. Win2003+apache+PHP+SqlServer2008 配置

    Win2003+apache+PHP+SqlServer2008 配置     安装前的准备: 1.Apache2.2.2 2.PHP5.2.17 3.SqlServer2008 4.sqlncli. ...

  6. QEMU 代码分析:BIOS 的加载过程

    http://www.ibm.com/developerworks/cn/linux/1410_qiaoly_qemubios/ QEMU 中使用 BIOS 简介 BIOS 提供主板或者显卡的固件信息 ...

  7. SVG DOM常用属性和方法介绍(1)

    12.2  SVG DOM常用属性和方法介绍 将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析 ...

  8. mybatis与hibernate不同(重要)

    Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象 ...

  9. 博客搬家到blog.wu8685.com

    博客园算是我最开始来的地方了吧,当时还在学校,为了找工作会看一些理论方面的东西,所以写的都是偏理论的心得. 后来参加了工作,开始忙起来,也就没有时间来更新了.其实忙都是借口,这点还是需要反思的. 大概 ...

  10. mysql新建用户并授权

      参考:https://www.cnblogs.com/zhangdiIT/p/8116776.html