Day8--Python--文件操作
对文件内部的内容进行操作
1.open('文件路径', mode='模式(默认是读r)', encoding='编码')
读取内容:
f = open('d:/练习.txt', mode='r', encoding='utf-8') #处理非文本时不给encoding #f为变量,也称文件的句柄,因为不是将文件全部打开载入,而是通过句柄获取,减少内存占用.
content = f.read() #f.read(3)读取三个字符
print(content) line1 = f.readline().strip() #空白:空格,\t,\n
line2 = f.readline().strip() #从上边的接着读,lin1的末尾有一个换行,所以line2就换行,再加上第二个print也会换行,所以会出现空行
print(line1)
print(line2) #print(line2, end='**') end默认= \n换行 print('刘德华', '刘青云', '刘嘉玲', end='\n' , sep='') sep间隔sep='*' content = f.read() #一次全都读取出来,缺点:1.读取大的文件的时候,内存容易溢出 2.操作比较麻烦
content = f.readlines() #全都加载进来,结果是列表 f是一个可迭代对象
for line in f: #内部其实调用的是readline()
print(line) f.close() #关闭 #read()
f = open('d:/练习.txt', mode='r', encoding='utf-8') #编码默认跟着操作系统走的 GBK
for line in f:
print(line)
f.close() #readline()
f = open('d:/练习.txt', mode='r', encoding='utf-8')
content = f.readline().strip()
print(content) #readlines() 输出的是列表
f = open('d:/练习', mode='r', encoding='utf-8')
content = f.readlines()
print(content) #write()
f = open('d:/sylar.txt', mode='w', encoding='utf-8')
f.write('娃哈哈') #写的时候先清空,再写入. w
f.flush() #刷新,清空缓存区,将缓存内容写入文件中;如果不flush,默认缓冲区满或执行close()后将缓存内容写入文件.
f.close() f = open("d:/sylar.txt", mode="w", encoding="utf-8")
f.write("周笔畅\n") # 写的时候. 先清空. 再写入. w
f.write("胡辣汤\n")
f.write("实付款\n")
f.flush()
f.close() #writelines()
f = open('../Day007集合,深浅拷贝/练习本.txt', mode='w', encoding='utf-8')
content = f.writelines(['阿道夫', '甘道夫', '清道夫']) #writelines()与readlines()相对,是一列元素,且写出的每个元素之间没有空格
f.flush()
f.close() #append 追加写
f = open("d:/sylar.txt", mode="a", encoding="utf-8")
f.write("娃哈哈") # 追加写
f.write("爽歪歪")
f.flush()
f.close() 文件的路径:
1.绝对路径:
1.从磁盘根目录寻找
2.网络上的路径
2.相对路径
相对于当前你这个程序所在的文件夹.(用的最多的)
f = open('../Day007集合,深浅拷贝/练习本.txt', mode='w', encoding='utf-8') 模式:
r 读 只读模式
w 写 只能写
a 追加写,只能写 b = bytes 这个时候处理的文件是字节
操作非文本文件的时候用带b的
rb
wb
ab r+ 读写模式
w+写读模式
a+追加读模式 r+b
w+b
a+b # 文件拷贝 rb, wb
f1 = open("d:/linux学院-桌面背景.jpg", mode="rb")
f2 = open("E:/小明自拍.jpg", mode="wb")
for line in f1:
f2.write(line)
f1.close()
f2.flush()
f2.close() # r+ 读写模式 正确用法:先读后写
f = open("菜单", mode="r+", encoding="utf-8") # r+最常见
s = f.read(1) # 读取一个字符
print(s)
f.write("胡辣汤") # r+模式. 如果你执行读了操作. 那么写操作的时候. 都是写在文件的末尾. 和光标没有关系
# f.seek(0) 把光标挪到最前端
# f.write("ab") # 在文件开头写入. 把原来的内容盖上 # for line in f:
# print(line)
# f.write("蛋炒饭") #默认内容加到最后端
# 正确用法: 先读后写
# f.close() # w+写读模式
f = open("菜单", mode="w+", encoding="utf-8") # 很少用.
f.write("疙瘩汤")
f.seek(0) # 移动到开头
content = f.read()
print("读取的内容是", content)
f.flush()
f.close() # a+ 追加读
f = open("菜单", mode="a+", encoding="utf-8")
f.write("韭菜鸡蛋饺子") f.seek(0)
content = f.read()
print(content) 其他相关操作:
1.光标:
r: 光标在开头
w: 光标在开头
a: 光标在末尾 seek(偏移量,位置)
位置:0开头,1当前位置,2末尾
f.seek(0) 光标移动到开头
f.seek(0,2) 移动到末尾 2.tell() 可知道光标位置
f = open("⼩娃娃", mode="r+", encoding="utf-8")
f.seek(0) # 光标移动到开头
content = f.read() # 读取内容, 此时光标移动到结尾
print(content)
f.seek(0) # 再次将光标移动到开头
f.seek(0, 2) # 将光标移动到结尾
content2 = f.read() # 读取内容. 什么都没有
print(content2)
f.seek(0) # 移动到开头
f.write("张国荣") # 写⼊信息. 此时光标在9 中⽂3 * 3个 = 9
print(f.tell()) # 光标位置9
f.flush()
f.close() 3.truncate 截断文件
f = open("⼩娃娃", mode="w", encoding="utf-8")
f.write("哈哈") # 写⼊两个字符
f.seek(3) # 光标移动到3, 也就是两个字中间
f.truncate() # 删掉光标后⾯的所有内容
f.close() f.truncate(n) #如果给出n,则从n位置截断,否则从当前位置截断 光标的单位是字节byte
读写的时候 单位 字符 with open(...) as f: #就不用加f.flush f.close
\ 表示上下两行是一行代码 #文件的修改:
1.从原文件中读取内容,修改内容,写入到文件副本中.
2.删除源文件,重命名文件副本为源文件的名字 import os
with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\
open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2:
content = f1.read()
new_content = content.replace("冰糖葫芦", "⼤⽩梨")
f2.write(new_content)
os.remove("⼩娃娃") # 删除源⽂件
os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂件
# 弊端: ⼀次将所有内容进⾏读取. 内存溢出. 解决⽅案: ⼀⾏⼀⾏的读取和操作 import os
with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\
open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2:
for line in f1:
new_line = line.replace("⼤⽩梨", "冰糖葫芦")
f2.write(new_line)
os.remove("⼩娃娃") # 删除源⽂件
os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂件 #复制文件副本
f1 = open("pic/图片.jpg", mode='rb') #此处地址只能是本地地址,不能是外部链接
f2 = open('pic/图片_副本.jpg', mode='wb')
for line in f1:
f2.write(line)
f1.close()
f2.flush()
f2.close() #爬取网络图片
import requests #如果未安装,可执行cmd=>pip=>pip install requests
rs = requests.get("http://pic1.win4000.com/wallpaper/0/510a14bbc8fcb.jpg") #地址为外部链接
f = open('pic/壁纸1.jpg', mode='wb')
f.write(rs.content)
f.flush()
f.close()
'''
3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。 apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3 通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。 '''
with open('homework/a', mode='r+', encoding='utf-8') as f:
result = []
for line in f:
lst = line.split()
dic = {'name': lst[0], 'price': lst[1], 'amount': lst[2]}
result.append(dic)
print(result)
sum = 0
for i in result:
sum += int(i['amount'])*int(i['price'])
print('总价为%s' % sum)
Day8--Python--文件操作的更多相关文章
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- Python之路Python文件操作
Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...
- python 文件操作 r w a
python基础-文件操作 一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件时,需要指定文件路径和以何等方式打开文件, ...
- Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python # -*- coding: utf8 -*- spath = " D:/dow ...
- 小学生都能学会的python(文件操作)
小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...
随机推荐
- 从主机A得到id_rsa.pub文件,在主机B创建用户danny加入该文件,实现主机A免密登录主机B
操作步骤: 1.主机A 生成公钥id_rsa.pub文件并导出该文件 root@mytest:~# ssh-keygen Generating public/private rsa key pair. ...
- JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁,
如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度) 在并发编程中,经常遇到多个线程访问同一个 ...
- JS--innerHTML属性
innerHTML属性,不是DOM的组成部分(常用) 获取标签里的文本内容,var span=document.getElementById("span").innerHTML; ...
- WinForm中在非UI线程更改控件值的办法
从非UI线程调用UI控件赋值.或进行其他更新UI的操作的话,会出现异常: System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxx”的线程访问它.” ...
- 2018-南京网络赛icpc-L题(分层最短路)
题意:给你n个点,m条边的有向带权图,然后你每次可以选<=k条边的边权变成0,问你1到n的最短路: 解题思路:这道题基本上就是原题了呀,bzoj2763(无向图),解法就是拆点跑分层的最短路,比 ...
- pycharm中查看源码的快捷键
将光标移动至要查看的方法处,按住ctrl 点击鼠标左键,即可查看该方法的源码
- BZOJ4003[JLOI2015]城池攻占——可并堆
题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi ...
- 【XSY2701】异或图 线性基 容斥原理
题目描述 定义两个图\(G_1\)与\(G_2\)的异或图为一个图\(G\),其中图\(G\)的每条边在\(G_1\)与\(G_2\)中出现次数和为\(1\). 给你\(m\)个图,问你这\(m\)个 ...
- MySQL 练习题 附答案,未完
综合练习题 表结构 整合一下方便查看 teacher student course scors 练习题 1.自行创建测试数据 create table student( sid int prima ...
- MT【302】利用值域宽度求范围
已知$f(x)=\ln x+ax+b (a>0)$在区间$[t,t+2],(t>0)$上的最大值为$M_t(a,b)$.若$\{b|M_t(a,b)\ge\ln2 +a\}=R$,则实数$ ...