转载请表明出处:https://www.cnblogs.com/shapeL/p/9141238.html

前提:文中例子介绍test.json内容:

hello
我们
326342

1.文件读取

(1)打开文件open,默认是已读模式打开文件

f = open('../dataconfig/test.json')
print(f.read())
f.close()
输出结果:
hello
鎴戜滑
326342

read():一次性读取文件所有内容

输出结果中出现乱码:需要给open函数传入encoding参数

f = open('../dataconfig/test.json',encoding='utf-8')
print(f.read())
f.close()
输出结果:
hello
我们
326342

(2)read(size):读取部分数据

f = open('../dataconfig/test.json',encoding='utf-8')
print(f.read(3))
f.close()
输出结果: hel

(3)redline():每次读取一行数据,逐行读取文件内容

f = open('../dataconfig/test.json',encoding='utf-8')
data = f.readline()
while data:
print(data)
data = f.readline()
f.close()
输出结果:
hello 我们 326342

输出结果中每一行数据读取之后都会空一行,解决方案:print(data.strip())或者print(data,end='')

(4)readlines():读取文件所有行

f = open('../dataconfig/test.json',encoding='utf-8')
data = f.readlines()
print(data)
print(type(data))
for line in data:
print(line.strip())
f.close()
输出结果:
['hello\n', '我们\n', '']
<class 'list'>
hello
我们
326342

(5)linecache.getline():读取某个特定行数据

import linecache
data = linecache.getline('../dataconfig/test.json',1)
print(data)
输出结果:
hello

总结:不同场景下读取方式选择

如果文件很小,read()一次性读取最方便
如果不能确定文件大小,反复调用read(size)比较保险
如果是配置文件,调用readlines()最方便;redlines()读取大文件会比较占内存
如果是大文件,调用redline()最方便
如果是特殊需求输出某个文件的n行,调用linecache模块
 
2.文件写入
(1)'w'就是writing,以这种模式打开文件,原来文件中的内容会被新写入的内容覆盖掉,如果文件不存在,会自动创建文件

f = open('../dataconfig/test.json','w')
f.write('hello,world!')
f.close()

test.json文件内容:hello,world!

(2)‘’a’就是appendin:一种写入模式,写入的内容不会覆盖之前的内容,而是添加到文件中

f = open('../dataconfig/test.json','a')
f.write('hello,world!')
f.close()

test.json文件内容:

hello
我们
326342hello,world!

3.上述读写文件例子看出,每次读写完之后,都要f.close()关闭文件,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

但是实际中,文件读写可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证任何时候都能关闭文件,可以使用try-finally来实现(finally内的代码不管有无异常发生,都会执行)

try:
f = open('../dataconfig/test.json', 'r')
print(f.read())
finally:
if f:
f.close()

每次都这样写实在是麻烦,python中的with语句用法可以实现

with open('../dataconfig/test.json',encoding='utf-8') as f:
print(f.read())
输出结果:
hello
我们
326342

打开多个文件进行操作:

with open('../dataconfig/test.json',encoding='utf-8') as f1,open('../dataconfig/test1.json',encoding='utf-8') as f2,open('../dataconfig/test2.json',encoding='utf-8') as f3:
for i in f1:
j = f2.readline()
k = f3.readline()
print(i.strip(),j.strip(),k.strip())

python3:文件读写+with open as语句的更多相关文章

  1. python3:文件读写+with open as语句(转)

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

  2. python3 文件读写,编码错误UnicodeDecodeError

    问题:python3 with open文件进行读写,报编码错误 /usr/local/Cellar/python3/3.5.2/Frameworks/Python.framework/Version ...

  3. Python3 文件读写r,w,a

    # Author;Tsukasa ''' f = open('yesterday','w') #文件句柄...注意open分为‘r’读模式,‘w’写模式(d会先创建文件或者覆盖文件),‘a’为追加模式 ...

  4. python3 文件读写操作中的文件指针seek()使用

    python中可以使用seek()移动文件指针到指定位置,然后读/写.通常配合 r+ .w+.a+ 模式,在此三种模式下,seek指针移动只能从头开始移动,即seek(x,0) . 模式 默认 写方式 ...

  5. Python3 文件读写注意事项(指针问题)

    C:\Users\Administrator\AppData\Local\Programs\Python\Python35\python.exe E:/python/day2/op.py Someho ...

  6. python文件读写,以后就用with open语句

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

  7. Python3:文件读写

    Python3:文件读写 open f = open('filename','r') # 读模式 f = open('filename','w') # 写模式 f = open('filename', ...

  8. Python3 IO编程之文件读写

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

  9. python3的文件读写模式

    任何一种语言,文件的读写都是非常常见的.python的文件读写非常简单,仅仅一个函数open(file也可以,但是我不常用). 先看看官网的解释: open(file, mode='r', buffe ...

随机推荐

  1. Perl 获得当前路径

      1.有两种方法:1. use Cwd;my $dir = getcwd;#$dir中即为当前目录的完整路径信息.2. my $dir = $ENV{'PWD'};#ENV是一个散列,用于存放环境变 ...

  2. 安装 mysql5.7.2 (Ubuntu 16.04 desktop amd64)

    1.下载mysql deb https://dev.mysql.com/downloads/mysql/ #移动到/usr/local/src/目录,解压 sudo mv mysql-server_5 ...

  3. django路由转发

    一.路由转发 通常,我们会在每个app里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中. 例如,下面是Django网站本身的UR ...

  4. Codeforces 447D - DZY Loves Modification

    447D - DZY Loves Modification 思路:将行和列分开考虑.用优先队列,计算出行操作i次的幸福值r[i],再计算出列操作i次的幸福值c[i].然后将行取i次操作和列取k-i次操 ...

  5. 最长的文件路径 Longest Absolute File Path

    2018-07-30 22:05:52 问题描述: 问题求解: 本题个人感觉还是挺有意思的,题目要求的是最长的文件路径,其实是需要keep tracking路径长度,如果出现文件则需要进行比较,看是否 ...

  6. 精伦盒子H1,插上USB,找不到对应的文件路径

    看USB的灯闪的挺正常的, 但就是不知道,该怎么mount 上去. 查了UDEV的资料, 发觉这个盒子虽然没有 udevmonitor命令, 却可以用  udevadm monitor 来监视udev ...

  7. JVM中对象的内存布局与访问定位

      一.对象的内存布局 已主流的HotSpot虚拟机来说,   在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填 ...

  8. Confluence 6 权限设置

    备注:当 '外部用户管理' 权限没有被选择的时候,你仅可以指派 LDAP 用户到本地用户组中. 只读(Read Only) 从你目录服务器上获得 LDAP 用户,用户组只能通过你的目录服务器进行修改. ...

  9. 01-trie练习

    这里用递归实现01-trie, 可以看做是区间长度为2的幂的权值线段树, 能实现权值的所有操作, 异或时, 翻转左右儿子即可. 练习1 CF 817E Choosing The Commander 大 ...

  10. hdu6394Tree lct

    树上弹飞绵羊,现场树分块没写出来= = 先预处理倍增,新建一个n+1节点,能弹到就建一条边,然后每操作2就cut,然后link,1的答案就是x到n+1的距离, //#pragma GCC optimi ...