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="编码") 文件的路径: ...
随机推荐
- 阿里云服务器晚上运行定时任务报Too many connections
1. 相关查询连接数的命令 mysql>show variables like '%max_connections%'; +-------------------------+--------- ...
- Delphi之TStrings和TStringLists类
Delphi之TStrings和TStringLists类 有些类不是组件,但它们支持存在的组件.这些类是其他组件的典型属性,直接由TPersistent派生,如TStrings.TCanvas和TC ...
- Nginx 针对上游服务器缓存
L:99 nginx缓存 : 定义存放缓存的载体 proxy_cache 指令 Syntax: proxy_cache zone | off; Default: proxy_cache off; Co ...
- HTML中的元素定位
static默认 relative相对定位 absolute绝对定位 mix relative and absolute混合相对定位和绝对定位 fixed固定定位 float浮动 reference ...
- Hibernate 注解映射
工作中遇到hibernate映射的一些问题,这里总结一下 (特别是测试时,许多数据并不能有效关联.所以@NotFound 很重要) 一,假设有2张表user,company 我们知道,一个用户属于一个 ...
- BZOJ2434 [NOI2011] 阿狸的打字机 【树链剖分】【线段树】【fail树】【AC自动机】
题目分析: 画一下fail树,就会发现就是x的子树中属于y路径的,把y剖分一下,用线段树处理 $O(n*log^2 n)$. 代码: #include<bits/stdc++.h> usi ...
- anaconda4.2.0
上改完cv2那个文件夹后,发现在使用导入的cv2中的方法时没有代码提示,于是搞啊搞,终于让我搞坏了mmp,这也太脆弱了. 无奈组装了一个全新的方法 过程比较坎坷也就没怎么记录 我的版本是选择最后一个o ...
- python 识别验证码
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...
- sshfs && tailon
sshfs 安装yum install glib2-devel fuse-sshfs官方版本地址https://github.com/libfuse/sshfs/releases目前最新版本:wget ...
- urllib的实现---timeout,获取http响应码,重定向,proxy的设置
1.Timeout设置超时 只能修改Socket设置全局Timeout #! /usr/bin/env python3 import socket import urllib.request # ti ...