Python标准库文件基本操作以及中文路径问题
最近在公司写RF自动化测试用例,Web测试,当时写这个的时候,有位大佬给了几个他自己写的例子和基于selenium库写的一些方法,基于Python标准库的一些方法,今天写的时候,翻看大佬写的自建库的一些方法,使用他写的方法中关于读写文件这块总是报错,于是上网查了查,以下分享我查到的关于Python标准库对于文件的基本操作和文件路径中存在中文编码的处理。
先了解一下文件操作基础知识
open 函数
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
file = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb |
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ |
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w |
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb |
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ |
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ |
以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
close()方法
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
fileObject.close()
例子:
#!/usr/bin/python
# -*- coding: UTF-8 -*-# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name# 关闭打开的文件
fo.close()
write()方法
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法不会在字符串的结尾添加换行符('\n'):
fileObject.write(string)
read()方法
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
语法:
fileObject.read([count])
在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
File对象的属性
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
属性 |
描述 |
file.closed |
返回true如果文件已被关闭,否则返回false。 |
file.mode |
返回被打开文件的访问模式。 |
file.name |
返回文件的名称。 |
file.softspace |
如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
如下实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace
Python File(文件) 方法
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
序号 |
方法及描述 |
1 |
file.close() 关闭文件。关闭后文件不能再进行读写操作。 |
2 |
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
3 |
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
4 |
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。 |
5 |
file.next() 返回文件下一行。 |
6 |
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
7 |
file.readline([size]) 读取整行,包括 "\n" 字符。 |
8 |
file.readlines([sizehint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 |
9 |
file.seek(offset[, whence]) 设置文件当前位置 |
10 |
file.tell() 返回文件当前位置。 |
11 |
file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 |
12 |
file.write(str) 将字符串写入文件,返回的是写入的字符长度。 |
13 |
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
Python文件路径基础
file object = open(file_name [, access_mode][, buffering]
我们直接从电脑复制的路径是这种"C:\Windows\System32\drivers\etc\test.txt"
路径写法(filename写法):
采用下面任何一种书写形式均可:
- 使用斜杠“
/
”:
"C:/Windows/System32/drivers/etc/test.txt"
不用反斜杠就没法产生歧义了(推荐使用此写法“/",可以避免很多异常)
- 将反斜杠符号转义
"C:\\Windows\\System32/\\drivers\\etc\\test.txt"
因为反斜杠是转义符,所以两个”\\
“就表示一个反斜杠符号
- 使用Python的raw string
r"C:\Windows\System32\drivers\etc\test.txt"
python下在字符串前面加上字母r
,表示后面是一个原始字符串raw string,不过raw string主要是为正则表达式而不是windows 路径设计的,所以这种做法尽量少用,可能会出问题。(前面加r
说的是读取到原始字符串)。
文件路径含中文处理方式
(1)
open(filename, 'w')这个方法中,filename这个参数必须是Unicode编码的参数。
我之前加上#-*-coding:utf-8-*-将编码设置为utf-8,当调用这个方法往里传参数时,需要将这个变量filename解码成 Unicode。
比如filename='中文.txt',使用open()时,这样写open(filename.decode('utf-8'), 'w'),这样创建的中文文件名就没有乱码问题
(2)
python直接读取中文路径的文件时失败,可做如下处理:
inpath ='
C:/Windows/System32/drivers/宝宝/test.txt'
uipath = unicode(ipath , "utf8")
然后用"uipath"经过编码后的路径去open()即可:
fin = open(uipath)
(3)
打开路径含有中文的文件时,要注意:
在windows对文件名编码是采用gbk等进行编码保存,所以要将文件路径先解码,在按gbk编码:
字符串--解码成unicode--编码(注意str和unicode的转换)
with open(r"D:\我的文档\桌面\python\test.py".decode('utf8').encode('gbk'),'rb') as f:
print f.read()
或者采用
#coding=utf-8 #当然这里要在前面设置系统的编码方式
with open(ur"D:\我的文档\桌面\python\test.py".encode('gbk'),'rb') as f:
或者with open(ur"D:\我的文档\桌面\python\test.py",'rb') as f:
摘要: 在windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存。打开文件的函数中使用诸如open(filename.encode('gbk'))可以很好的解决。另外路径分隔符要写Unix风格的'/',不要写'\'
windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存。打开文件的函数中使用诸如open(filename.encode('gbk'))可以很好的解决。
(4)
a="C:\Users\Dell\Desktop\ATOU\测试用例" (带中文的路径)
a=a.decode("utf-8").encode("gbk") (进行转码)
import sys
sys.path.append(a) (指定路径成功)
合并起来一条:
import sys
sys.path.append("C:\Users\Dell\Desktop\ATOU\公共测试用例".decode("utf-8").encode("gbk"))
文件的路径出现了解析错误的情况,所以在传入文件路径的时候先把文件的编码格式转了先给代码前边加
#encoding=utf-8
#encoding=utf-8
inpath = 'D:/学习/python/python学习/cc.txt'
uipath = unicode(inpath , "utf8")
fr=open(uipath,"r")
f=fr.read()
print f
fr.close()
(5)
找了这么多,基本都是找的别人的例子,以上关于中文处理不保证有效性,遇到这个多试试吧,我分享一下我最后的做法。
f = open(r"C:\Windows\System32\drivers\etc\”+u”
中文测试"
,"r")
- 关于中文路径这儿说几点:
1 、据说python3就没有中文路径文件操作报错这个问题了,奈何我用的是2.7。
2、 u’字符串’ 代表是unicode格式的数据,路径最好写成这个格式,别直接跟字符串’字符串’这类数据相加,相加之后type 就是str,这样就会存在解码失误的问题。
3、在查找资料过程中,有一种说法就是路径不能超过五层,也就是路径中“\”最多四个,我当时的“\”就是四个,没试过五 个会怎么样。
这么多东西算是大杂烩,找了很多资料总结的,我可以说没学过Python,暂时也没打算学,所以查东西的时候,没往深的探究,贴出来的知识也都很基础,希望能和大家一起讨论分享,共同进步。
Python标准库文件基本操作以及中文路径问题相关推荐
- Python 标准库 —— 文件解压(zip、gz、pkl、tar)
Python模块学习:zipfile zip文件操作 Python 学习入门(16)-- zipfile 1. zip ⇒ zipfile with zipfile.ZipFile('../data/ ...
- Python标准库03 路径与文件 (os.path包, glob包)
摘要:Python标准库 文件系统 os.path glob.glob os.path包 os.path包主要是处理路径字符串,比如说'/home/vamei/doc/file.txt',提取出有用信 ...
- python 路径格式化_吐血整理!140种Python标准库、第三方库和外部工具都有了!...
导读: Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据 ...
- python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...
原标题:精华 | 140种Python标准库.第三方库和外部工具都有了 作者 | 宋天龙 来源 | 大数据(ID:hzdashuju) [导读]Python数据工具箱涵盖从数据源到数据可视化的完整流程 ...
- pythondifflib详解_用python标准库difflib比较两份文件的异同详解
[需求背景] 有时候我们要对比两份配置文件是不是一样,或者比较两个文本是否异样,可以使用linux命令行工具diff a_file b_file,但是输出的结果读起来不是很友好.这时候使用python ...
- Python 标准库 —— os 路径(os.path)
<a href="http://blog.csdn.net/lanchunhui/article/details/50193327", target="_blank ...
- 抽取python 标准库页面生成 mobi 离线文件
前段时间买了个 kindle ,所以就不想老是开电脑 看 书了.而在学习python 时,看到python 主要的还是熟悉一些库的功能. 所以就想着把标准库给捉下来看. python 标准库: htt ...
- python 标准库之 glob 介绍(获取文件夹下所有同类文件)
python标准库之glob介绍 glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合. 1.通配符 星号(*)匹配零个或多个字符 import glob for name in glob ...
- Python标准库判断图片文件和声音文件的格式
每种文件都有自己独特的文件头结构和数据组织形式,这些都会在specification中进行详细说明和描述. GIF文件的头结构比较简单,前4个字节是GIF8,例如: 但是其他图片文件的结构就复杂很多了 ...
最新文章
- 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度
- JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
- 配置oracle驱动_Myeclipse中添加Oracle
- c++ 自定义比较函数,运行时发生segmentation fault
- CPU的向量化、多核技术、多路技术、众核技术
- XML文件解析--Python
- Card Trick(模拟)
- java math mod_java8 Math新增方法介绍
- vscode中文_VS Code 中文社区正式成立啦!VS Code Day 圆满落幕!
- 如何通过 Apple Watch 解锁 Mac
- html5css3网站设计基础教程答案,HTML5+CSS3网站设计基础教程_动手实践源代码
- WinCE6.0增加中文字库
- Viusal 各个版本离线镜像
- 用清除cookies的方式实现防止重复投票,值得收藏学习!
- 近期全球知识图谱相关行业动态、会议讲座、综述推荐
- 逆向某视频直播软件,破解收费观看
- HM二次开发 - Data Names及其使用
- 空间换时间--编程小绝招解决电话区号识别算法问题
- 微信小程序实现仿微信聊天界面(各种细节处理)
- 【大学物理·恒定电流的磁场】磁场对载流导线的作用
热门文章
- EBS MO_GLOBAL包的分析
- android 6.0 SystemUI源码分析(1)-SystemUI介绍
- 大数据培训ClickHouse表引擎
- 计算机软件和应用审稿可以加急吗,计算机类期刊审稿周期
- Ubuntu命令关机
- 二分 1238:一元三次方程求解
- 【转载】磁盘空间引起ES集群shard unassigned的处理过程
- Centos 7iso百度网盘下载
- 已解决requests.exceptions.ConnectTimeout: HTTPConnectionPool(host=‘123.96.1.95‘, port=30090): Max retri
- 【大数据】什么是大数据