文件读写

A 读取文件

读文件三步:开——读——关。
file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
第一个参数是文件的保存地址
第二个参数表示打开文件时的模式(r(读),w(写入),a(追加))
第三个参数encoding='utf-8',表示的是返回的数据采用何种编码,一般采用utf-8或者gbk
——————————————————————————————
mac
open('/Users/Ted/Desktop/test/abc.txt'') #绝对路径
open('abc.txt') #相对路径
#相对路径也可以写成open('./abc.txt')

windows
Windows系统里,常用\来表示绝对路径, /来表示相对路径
C:\Users\Ted\Desktop\test\abc.txt #\在Python中是转义字符,Windows的绝对路径通常要稍作处理
写成以下两种格式

open('C:\\Users\\Ted\\Desktop\\test\\abc.txt')
#将'\'替换成'\\'

open(r'C:\Users\Ted\Desktop\test\abc.txt')
#在路径前加上字母
——————————————————————————————
获取文件路径方法
用VS Code打开文件夹,在文件点击右键
或者
将文件拖入终端窗口,获得文件的绝对路径
——————————————————————————————
B 写入文件

【第1步-开】以写入的模式打开文件。
file1 = open('/Users/Ted/Desktop/test/abc.txt','w',encoding='utf-8')

【第2步-写】往文件中写入内容,使用write()函数。
file1.write('张无忌\n')

#file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8')
#以追加的方式打开文件abc.txt
file1.write('张无忌\n')
#把字符串'张无忌'写入文件file1

【第3步-关】还是要记得关闭文件,使用close()函数
file1.close()

#注意事项:
1.write()函数写入文本文件的也是字符串类型。
2.在'w'和'a'模式下,如果你打开的文件不存在,那么open()函数会自动帮你创建一个
————————————————————————————————————————
为了避免打开文件后忘记关闭,占用资源或
当不能确定关闭文件的恰当时机的时候,我们可以用到关键字with

# 普通写法

 file1 = open('abc.txt','a')
file1.write('张无忌')
file1.close()

# 使用with关键字的写法

 with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
#格式:冒号不能丢
file1.write('张无忌')
#格式:对文件的操作要缩进
#格式:无需用close()关闭

—————————————————————————————————————————
scores.txt
罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90

 file = open('./scores.txt','r',encoding='utf-8')
file_lines = file.readlines() #函数readlines(),“按行读取”
file.close() final_scores = [] for i in file_lines:
data =i.split() #split()把字符串分开,把字符串切分成更细的一个个的字符串
sum = 0
for score in data[1:]: #遍历列表中第1个数据和之后的数据
sum = sum + int(score) #然后依次加起来,但分数是字符串,所以要转换
result = data[0]+str(sum)+'\n' #结果就是学生姓名和总分
final_scores.append(result) #每统计一个学生的总分,就把姓名和总分写入空列表 winner = open('./winner.txt','w',encoding='utf-8')
winner.writelines(final_scores) #writelines()函数,此处final_scores是一个列表,write()的参数必须是一个字符串,而writelines()可以是序列
winner.close()

——————————————————————
扩展
join()函数,字符串合并

语法:str.join(sequence)
str代表在这些字符串之中,你要用什么字符串连接
sequence代表数据序列

 a=['c','a','t']
b=''
print(b.join(a))
c='-'
print(c.join(a))
cat
c-a-t

######################################################
# 下面注释掉的代码,皆为检验代码(验证每一步的思路和代码是否达到目标,可解除注释后运行)。

 file1 = open('winner.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close() dict_scores = {}
list_scores = []
final_scores = [] # print(file_lines)
# print(len('\n')) # 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1] for i in file_lines: # i是字符串。
print(i)
name = i[:-4] # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)
score = int(i[-4:-1]) # 取出成绩
print(name)
print(score)
dict_scores[score] = name # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)
list_scores.append(score) # print(list_scores)
list_scores.sort(reverse=True) # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores) for i in list_scores:
result = dict_scores[i] + str(i) + '\n'
# print(result)
final_scores.append(result) print(final_scores) # 最终结果 winner_new = open('winner_new.txt','w',encoding='utf-8')
winner_new.writelines(final_scores)
winner_new.close()

锦瑟
[唐] 李商隐

锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

 list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']  # 将要默写的诗句放在列表里。

 with open ('poem2.txt','r',encoding='utf-8') as f:
lines = f.readlines()
print(lines) #显示完整的诗
with open('poem2.txt','w',encoding='utf-8') as new:
for line in lines:
if line in list_test: # 属于默写列表中的句子,将其替换成横线。
new.write('____________。\n')
else:
new.write(line)

########################################################################

csv是一种文件格式,你可以把它理解成“简易版excel”

如果要手动新建csv文件,我们可以先新建一个excel表格,然后选择另存为“csv”格式即可
一张csv格式的表格,我们也可以选择另存为“excel”格式

用csv模块读写csv文件

英文教程:https://docs.python.org/3.6/library/csv.html

中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv

先看案例

##########################################################################

csv文件内容:

 import csv

 with open("test.csv",newline = '')  as f:
reader = csv.reader(f)
#使用csv的reader()方法,创建一个reader对象
for row in reader:
#遍历reader对象的每一行
print(row)

#####################################################################

往csv格式文件写入数据

csv文件内容:

追加写入两行列表

 import csv
with open('test.csv','a', newline='',encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['', '猫砂', '', '', ''])
writer.writerow(['', '猫罐头', '', '', ''])

writerow()和writerows的区别
(1)writerow() 括号内的内容为列表;
(2)writerows() 括号内的内容为元组,且元组内的元素由两个以上的列表组成。

Python 【文件的读写】的更多相关文章

  1. python文件的读写的模式

    <1>打开文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式) 示例如下: f = open('test.txt', 'w' ...

  2. Python文件的读写操作

    Python文件的使用 要点:Python能够以文本和二进制两种形式处理文件. 1.文件的打开模式,如表1:  注意:使用open()函数打开文件,文件使用结束后耀使用close()方法关闭,释放文件 ...

  3. python文件的读写总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  4. python文件的读写权限以及相关应用read、write和文件指针

    f=open('ceshi.txt','a',encoding='utf-8')r=open('ceshi.txt','r',encoding='utf-8')上面的2种写法可以用with来写:wit ...

  5. Python文件的读写

    一.写数据 f = open("hello.txt", "w") f.write("hello world python!") f.clos ...

  6. 【8】python文件的读写方法

    (1).读文件的步骤: (1)打开文件 open(path,flag,encoding,[errors]) path:打开路径 flag:打开方式 r(只读) rb(二进制格式) r+(可以读写) w ...

  7. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  8. python文件的读写追加等操作

    # encoding:utf-8 # 文件读取操作 fp=open("E:\\file.txt","r",encoding="utf-8" ...

  9. 第9.9节 Python文件随机读写定位操作方法seek

    类似于C语言,Python也提供了文件位置定位的操作方法seek. 一. 语法 seek(offset, whence=SEEK_SET) 语法释义: 1)offset :将文件当前操作位置移动偏移量 ...

  10. python: 文件的读写

    #文件的读取.py a=open('test.txt').readline() #只读取文件第一行,保存为字符串格式 b=open('test.txt').read() #读取全部内容,保存为字符串格 ...

随机推荐

  1. redisson spring boot starter 做分布式锁

    使用redisson做分布式锁 分布式锁 在java中单体应用中,我们如果想要保证一个接口或者服务.方法当下只有一个线程在运行,我们可以通过JDK提供的Lock.Semaphore.同步锁等多种方式实 ...

  2. class与computed一起应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. C语言联合

    联合使用关键字union,表示的一种量,只占用一块内存,具体如何占用取决于类型最大的那个.比如int和float会选用float. 联合也可以和结构体结合起来用,也可以赋值,通过.属性名的方式指定初始 ...

  4. (四)OpenCV-Python学习—形态学处理

    通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素.常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽 ...

  5. 关于linux下的系统存储管理

    https://blog.csdn.net/aaaaaab_/article/details/80159871 //查看当前系统磁盘使用空间 df -h //查看当前目录文件占用空间大小 du -sh ...

  6. RabbitMQ 3.7.X集群:从入门到精通,这一篇就够了

    RabbitMQ是流行的开源消息队列系统,本身已经具备了较强的并发处理速度及运行稳定性,然而在大规模的实际应用中,往往还需要使用集群配置来保证系统中消息通信部分的高可用性,并发处理性能及异常恢复能力. ...

  7. Jupyter Notebook 远程连接配置(转载)

    转载博客的Jupyter Notebook远程连接配置方法. 0 - 参考资料 https://www.jianshu.com/p/08f276d48669?utm_campaign=maleskin ...

  8. 编译安装MySQL5.6

    安装必需的工具  比如cmake.gcc.g++.git CentOS使用下面的命令: yum install cmake gcc g++ git Ubuntu使用下面的命令: apt-get ins ...

  9. SpringMvc+ajax跨域请求时,出现options类型的请求并返回403的解决方案

    在使用 $.ajax({ url:'http://127.0.0.1:8081/rest/ccxxx/xxxx', type:'POST', dataType:"json", co ...

  10. 记一次线上由nginx upstream keepalive与http协议"协作"引起的接口报错率飙高事件

    年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽 ...