-
Python3中打开文件的方式(With open)
2018-08-05 19:53:16python文件读写文件是最常见的IO操作... 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件...文章目录
0.背景知识 & IO操作的类型
- python文件读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
- 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘。
- 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)
常见的IO操作的类型如下:
type info r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
1.常规方式:读取文件-----open()
step1: 打开
f = open( '/Users/michael/test.txt', 'r' )
- r 表示读取文件,我们就成功地打开了一个文件
- 但是, 如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在,错误情况如下:
f=open('/Users/michael/notfound.txt', 'r') Traceback (most recent call last): File "<stdin>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
step2: 读取
如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
f.read() 'Hello, world!'
step3: 关闭
最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:
最终方案:
try: f = open('/path/to/file', 'r') print(f.read()) finally: if f: f.close()
2.推荐方式:读取文件-----With Open
1).读取方式
每次如果都按照如上最终方案去写的话,实在太繁琐。Python引入了with语句来自动帮我们调用close()方法
重点:!!!with 的作用就是自动调用close()方法 !!!with open( '/path/to/file', 'r' ) as f: print( f.read() ) # 这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法
f.read(): 读取全部文件内容
f.read(size): 每次读取size个字节内容
f.readline(): 每次读取一行的内容
f.readlines(): 读取全部内容,但结果是个list,每行内容是一个元素
如果遇到超大文件,需要注意:
- 调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了。
- 要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。例如,read(1024) 每次读取1024个字节的数据内容
- 调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
- 如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines(): print( line.strip() ) # 读取文件之后,文字末尾会出现'\n' # strip() 函数中可以把目标内容line里面所有的空格,空行等都删除掉,只剩余文字内容
2).常见的坑
读取静态文件的函数,最好不要写相对路径!!!
(1)如上图,Fold001文件夹下面有个read_file.py文件,这个文件读取hello.txt文件,代码如上图,这样可以正常引用
(2)但如果引用静态文件的函数,被其他函数再次调用的时候。 例如被Fold002里面的函数read.py调用,那么readfile()函数相当于是在read.py所在目录执行的,那么静态文件hello.txt相对于read.py的路径,就不是上图的路径了,否者会运行会报错,如下
3.写入内容----open()函数
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:
f = open('/Users/michael/test.txt', 'w') f.write('Hello, world!') f.close()
open函数使用注意地方:
- 你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。
- 当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。
- 只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险
4.写入内容----- With Open函数
with open('/Users/michael/test.txt', 'w') as f: f.write('Hello, world!')
要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码字符编码
5.打开非utf-8编码的文件
要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
with open('/Users/michael/gbk.txt', 'r', encoding='gbk') as f: f.read()
- 遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。
- open()函数还接收一个errors参数,errors=‘ignore’ 表示遇到编码错误的时候直接忽略
with open('/Users/michael/gbk.txt', 'r', encoding='gbk',errors='ignore') as f: f.read()
6.打开二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件即可:
with open('/Users/michael/test.jpg', 'rb') as f: f.read() # b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' 十六进制表示的字节
-
Excel 2016 打开后空白的解决方法
2019-06-29 14:04:37最近使用Excel 2016时遇到一个这样的状况,就是双击打开一个有内容的xlsx表格后显示空白,用管理员身份打开也是一样,这里总结一下解决方法: 说明:Office 2016在安装时会默认安装在系统盘,都不给修改安装位置的...最近使用Excel 2016时遇到一个这样的状况,就是双击打开一个有内容的xlsx表格后显示空白,用管理员身份打开也是一样,这里总结一下解决方法:
说明:Office 2016在安装时会默认安装在系统盘,都不给修改安装位置的机会,我的安装位置是做了修改的(修改Office 2016安装位置的方法:https://blog.csdn.net/B2345012/article/details/97559229),安装位置可能与诸位的不同,所以在下面的路径中,只修改需要改动的地方即可。
打开后的文件是这样的:
解决方法:
修改注册表:使用快捷键Windows + R进入运行,输入regedit,然后确定或回车进入到注册表编辑器:
开始找要修改的位置:HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command (如果一个一个找你嫌麻烦就直接复制这个位置,粘贴到图中红色粗线框的位置后回车),在右边蓝色粗线框中默认上双击:
双击默认打开编辑字符串:
将数值数据中最后的 /dde 修改为 "%1" 后确定,即将"E:\SoftwareInstallation\Microsoft Office 2016\Microsoft Office\Root\Office16\EXCEL.EXE" /dde 修改为"E:\SoftwareInstallation\Microsoft Office 2016\Microsoft Office\Root\Office16\EXCEL.EXE" "%1"(注意"%1"和前面之间有空格,双引号是英文状态的):
修改完了之后再去打开文件试试是不是有内容了:
补充:打开后缀为.xlsx文件有内容,打开后缀为.xls文件后是空白:
Excel 2007及以下版本创建的文件后缀是.xls,而Excel 2007以上版本创建的文件后缀是.xlsx,Excel 2016有时打开.xlsx文件时有内容,但是打开.xls文件后没有内容,其解决方法也是需要修改注册表:
解决方法:
在注册表编辑器中找到路径HKEY_CLASSES_ROOT\.xls,修改其中的默认项,将默认项的值Excel.Sheet.8修改为Excel.Sheet.12即可:
亲测有效!
-
Windows10右键添加“在此处打开命令窗口”
2017-12-16 20:27:55由于现在Win10默认右键只有Powershell,所以为了以后方便使用就把右键添加“在此处打开命令窗口”的代码分享出来。(#^.^#) 效果 第一个是在 桌面 / 文件夹窗口中 / 选中文件夹上 直接点击右键,显示“在此处打开...今天跑代码时用到了Powershell,有一个环境变量死活都找不到,无奈只好重新回到cmd命令行测试,结果立马就跑通了。-_-||
由于现在Win10默认右键只有Powershell,所以为了以后方便使用就把右键添加“在此处打开命令窗口”的代码分享出来。(#.#)效果
第一个是在 桌面 / 文件夹窗口中 / 选中文件夹上 直接点击右键,显示“在此处打开命令窗口”选项,如图:
第二个是在 桌面 / 文件夹窗口中 / 选中文件夹上 按住Shift键点击右键,同时显示“在此处打开命令窗口”和“在此处打开Powershell窗口”两个选项,如图:具体步骤
第一步:新建一个txt文件,命名为OpenCmdHere.txt,注意设置编码格式为ANSI
第二步:在文件中输入如下代码,并保存=====2018.8.28更新 ======
根据@ZhangTianrongUnique 和 @水的表层 反馈,将代码修改如下:
新版:Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\""
原始版本:
这种是先调用powershell,通过powershell打开cmdWindows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command] @="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\"" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command] @="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\"" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command] @="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\"" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command] @="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\""
第三步:更改文件后缀名为reg,弹出的提示点确认。
第四步:双击OpenCmdHere.reg文件运行,弹出的提示点确认,修改注册表就大功告成了! -
Python 技术篇-利用pickle库查看pkl文件实例演示。pkl是什么类型的文件?怎么来打开它?
2018-12-10 14:10:32pkl是什么类型的文件?怎么来打开它? pkl格式的文件是python用于保存文件用的。...博主之前呢也踩了个小坑呢,就是在打开文件的时候用的是r,r是用来打开文本类型文件的,我要打开的是二进制类型的文件,需要用rb。一说 pkl 很容易想到王者荣耀的 kpl 比赛,哈哈!
pkl 格式的文件是 python 用于保存文件用的。本文的重点是怎么打开这类文件,请看大屏幕!
博主之前呢也踩了个小坑呢,就是在打开文件的时候用的是 r,r 是用来打开文本类型文件的,我要打开的是二进制类型的文件,需要用 rb。因为文件呢主要分为这两种文本类型的和二进制类型。你在用的时候要看打开的文件是什么类型的,别用错了!
# -*- coding: UTF8 -*- # cPickle是python2系列用的,3系列已经不用了,直接用pickle就好了 import pickle # 重点是rb和r的区别,rb是打开2进制文件,文本文件用r f = open('itchat.pkl','rb') data = pickle.load(f) print(data)
下面这个图是我当时用 itchat 库控制微信的时候生成的文件,适用于存储接收到的消息的,打开效果图如下:
喜欢的点个赞❤吧! -
(亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
2018-05-05 22:52:22每次打开Excel(WPS、Office都会出现,当前版本是Office2016)文件都会出现两个窗口,一个是空白的sheet1,,另一个是自己的文档,让小编是在很烦,因为每次打开一个文件就相当于打开两个,还会让Excel打开速度变慢,... -
Excel 2016双击文件打开后是空白,再次双击才能打开(或者通过文件,打开才能打开)
2019-06-07 18:20:11打开的方式才能打开。 虽说能够打开文件,但是对于咱们这种追求完美的人来讲,怎么能容忍某种方式无法使用呢? 因此,通过搜索引擎搜索问题,查看解决方案,以下是本人尝试过的方法及其结果: 1. 视图 --> ... -
正确打开db文件的方式,避免乱码和无意义内容
2018-11-28 11:34:27db文件如果用记事本或者Notepad++打开,会显示乱码,改变编码不能解决问题,如果用UltraEdit打开,可以看到进制数据,但是无意义的。 正确的方法有两种: (1)用sqlitespy打开,下载网址为:... -
Jupyter使用 | Jupyter Notebook打开默认文件夹以外的文件
2018-03-03 17:38:04修改Jupyter Notebook的默认打开目录 Jupyter启动之后默认打开的是C盘目录,如下: 想要打开其他盘符的文件无法实现,如D、E、F盘目录下的文件。现有解决办法如下,无需修改Jupyter Notebook的默认打开路径。 ... -
ubuntu怎样打开终端(方法5种)
2017-09-29 15:20:20虽然这不是一编技术经验,但是想起来小编刚接触ubuntu的时候也不会打开终端,所以今天小编就给一些玩ubuntu的新手们,分享一下经验。 怎样打开终端 (方法1) 1 首先在桌面任意空白处,按CTRL+ALT+T ... -
微信打开链接添加在浏览器中打开提示
2019-05-21 01:36:02使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等。网上流传的各种微信打开下载链接,微信一更新基本失效。大家常用的方法是,弹出一个遮罩提示用户在新的浏览器窗口打开,再也不用管微信如何的更新。 ... -
md文件的正确打开方式
2019-06-01 01:16:49常常会遇到md格式的文件,默认打开方式是记事本,但是打开后不利于阅读,体验很差。 直到今天才明白,正确打开md文件是一件多么美妙的事情!!! 可以使用**Notepad++**来打开,该软件在编程方面也很好用,推荐使用... -
python模拟打开Google浏览器并打开网页(selenium+chrome)
2017-12-01 16:45:17python模拟打开Google浏览器并打开网页 -
【Python】python文件打开方式详解——a、a+、r+、w+、rb、rt区别
2015-08-03 18:43:43第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,... -
在Windows 10下打开带管理员权限的PowerShell的5种方式
2018-03-11 18:11:51翻译自:5 Ways to Run Powershell as Administrator in Windows 10方式1:在Cortana搜索栏中打开带管理员权限的PowerShellWindows 10的任务栏自带了Cortana搜索框。只需在搜索框中输入powershell。在出来的搜索结果... -
文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开...
2018-07-25 19:04:05在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试。这类无法关闭删除文件夹的情况,如下图所示。 解决这个的... -
NotePad 打开文件 出现中文汉字乱码 解决办法
2019-08-22 15:13:09NotePad 打开文件 出现中文汉字乱码 解决办法 现象: 出现中文汉字乱码: 解决办法: 先别着急用notepad修改编码 1. 用windows系统自带记事本打开, 2 ,选择文件另存为 3. 如果看到:编码是 UTF-8 ... -
如何打开ipynb文件
2017-06-11 22:43:04最近在学习《TensorFlow 实战GoogLe深度学习框架》这本书,发现里面提供的源码后缀是.ipynb,而不是.py,那么我们应该怎么打开.ipynb后缀的文件呢? ipynb,即ipython notebook,需要用ipython notebook打开,... -
vscode 打开终端快捷键
2018-03-12 10:17:34使用vscode的过程中,我们可能会用到终端,虽然系统自带有,但是还要另外打开,有点不方便,vscode中就有这个功能,打开方法1. 使用快捷键: ctrl + · 即可;注意那个点是键盘上 esc 下面的那个;或者:2. 选择... -
webstorm怎样打开命令行终端 打开命令行工具
2018-11-26 10:59:43点击底部的图标即可快速打开 找不到的就用快捷键打开 -
win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)
2018-10-27 21:53:13How to change the default programs in ...1.例如有文件 a.shp文件,需要以后双击默认使用notepad++打开。但是每次双击,都要弹出选择框选择打开方式里面的Notepad++。不能直接打开,很烦很烦有木有。类似这样: ... -
关于Anaconda安装以后使用Jupyter Notebook无法直接打开浏览器的解决方法
2018-08-21 11:31:381.首先打开Anoconda Prompt,输入命令jupyter notebook --generate-config,系统会自动产生一个名为jupyter_notebook_config.py的文件,并且Anoconda Prompt窗口中会给出文件的路径。 2.打开jupyter_notebook_... -
H5打开APP技术总结
2018-01-30 11:49:37在H5页面打开APP的方法一般有两种,在IOS 9以前,一般使用的技术是URL Scheme。这种方式虽然可自定义程度很高,能够巧妙地实现很多跳转,但弊端也很明显:我们只能通过 scheme://example 这种格式的链接来实现跳转,... -
win10图片打开方式里没有默认照片查看器的解决方法
2018-05-30 12:03:03今天安装好win10后发现打开图片的默认程序是win10自带的画图工具,非常不方便,并且右键选择打开方式里边也找不到默认的“照片查看器”。百度搜索了一下关于win10打开方式恢复默认照片查看器的方法,虽然有用但非常... -
VS2019无法打开源文件
2019-10-21 11:51:16前言 ...刚一开始就遇到大问题,从网上摘了一个socket通信的程序后,疯狂标红,无法打开源文件。 最终在项目 -》 属性 -》 C/C++ -》常规 中的使用Windows运行时扩展,选择是就解决了这个问题。 ... -
如何打开.ipynb文件
2018-05-04 18:02:59最近碰到文件名后缀为.ipynb文件,起初没太在意这种文件格式,用Notepad++打开之后看到也是类似于JSON格式的信息,以为也是为其他的一些文件服务的(类似于配置一些HTML文件的配置文件)。但是后来才发现这也是一种... -
关于“在Visual studio 2017中出现:无法打开源文件”的问题!
2018-04-29 18:20:26初到公司交接了公司的一个互动软件项目,但在项目移植和开发中却出现了“无法打开源文件”的问题。那么出现这种问题,一般是因为自己项目的文件路径在项目中没有设置正确。解决方法1.明确自己项目中解决方案的配置和... -
JS打开新页面的两种方式:当前页面打开和新页面打开
2019-10-22 15:18:59在实际的开发过程中,经常会遇到需要刷新当前页面或者打开新页面的需求,根据具体情况我们会选择不同的打开方式,今天就简单记录一下两种方式的写法: 1.点击某一个链接之后跳转到新页面显示 window.open('... -
如何阻止打开淘宝网站时自动打开淘宝app
2018-01-31 10:48:09现在淘宝网站貌似升级了,安卓开发时,用webview打开淘宝网站时会自动打开掏宝app。(其他浏览器也是这样)。如何阻止打开淘宝网站时自动打开淘宝app。 -
宝塔面板能打开,但网站不能打开解决办法
2019-10-27 22:11:20宝塔面板能打开,但网站不能打开解决办法。ping也能ping得通网址 清理了几个大的log文件(大概5-6G)后,重启发现网站登不了, ssh能进去,宝塔也能打开。服务器重启n次依旧解决不了,最后就把网站数据库停止后重启... -
文件删不掉显示已在另一个程序中打开的解决办法
2019-08-12 12:39:50生活中经常遇到这样的情况,删除文件夹时弹出【文件夹或文件已在另一程序中打开】的提示,重试往往是不管用的。希望下面的教程能帮到大家。 如果你的提示是这样的,请进入教程! 打开任务管理器(可按快捷键找到...