精华内容
下载资源
问答
  • 自己学python的open函数时,发现在pycharm里新建一个file_name.txt文本文件,输入中文保存。再用open(file_name,'r+')打开,再去读写时出现了一些问题。再三控制变量多轮测试后,总结如下: 1.当原文件为utf8...

    自己学python的open函数时,发现在pycharm里新建一个file_name.txt文本文件,输入中文保存。再用open(file_name,'r+')打开,再去读写时出现了一些问题。再三控制变量多轮测试后,总结如下:

    1.当原文件为utf8编码格式,且不包含中文,则对其进行读操作,正常;对其进行写操作(非中文),正常,文件编码格式不变;
    当写入中文字符时,文件编码格式变为gbk,此时pycharm中的文件会将你输入的中文显示为16进制数,并会提示你用gbk编码reload文件。
    2.当原文件为utf8编码格式,若包含中文,此时对其进行读操作,则可能报错UnicodeDecodeError,也可能不报错,但会输出乱码。是否报错跟中文内容有关(当我在测试时在一串中文中加入'航'就报错了,去掉又没报错,好奇怪).
    写入中文情况与1相同,建议用sys.getfilesystemencoding()查看系统编码格式,再在open()里改encoding。我的a=utf-8 ,open的encoding默认为‘gbk’

      






    转载于:https://www.cnblogs.com/wangyi0419/p/11192593.html

    展开全文
  • python open函数

    千次阅读 2017-10-17 10:09:02
    open函数 open 函数可以打开一个文件。超级简单吧?大多数时候,我们看到它这样被使用: f = open('photo.jpg', 'r+') jpgdata = f.read() f.close() 我现在写这篇文章的原因,是大部分时间我看到open被...

    open函数

    open 函数可以打开一个文件。超级简单吧?大多数时候,我们看到它这样被使用:

    f = open('photo.jpg', 'r+')
    jpgdata = f.read()
    f.close()
    

    我现在写这篇文章的原因,是大部分时间我看到open被这样使用。有三个错误存在于上面的代码中。你能把它们全指出来吗?如不能,请读下去。在这篇文章的结尾,你会知道上面的代码错在哪里,而且,更重要的是,你能在自己的代码里避免这些错误。现在我们从基础开始:

    open的返回值是一个文件句柄,从操作系统托付给你的Python程序。一旦你处理完文件,你会想要归还这个文件句柄,只有这样你的程序不会超出一次能打开的文件句柄的数量上限。

    显式地调用close关闭了这个文件句柄,但前提是只有在read成功的情况下。如果有任意异常正好在f = open(...)之后产生,f.close()将不会被调用(取决于Python解释器的做法,文件句柄可能还是会被归还,但那是另外的话题了)。为了确保不管异常是否触发,文件都能关闭,我们将其包裹成一个with语句:

    with open('photo.jpg', 'r+') as f:
        jpgdata = f.read()
    

    open的第一个参数是文件名。第二个(mode 打开模式)决定了这个文件如何被打开。

    • 如果你想读取文件,传入r
    • 如果你想读取并写入文件,传入r+
    • 如果你想覆盖写入文件,传入w
    • 如果你想在文件末尾附加内容,传入a

    虽然有若干个其他的有效的mode字符串,但有可能你将永远不会使用它们。mode很重要,不仅因为它改变了行为,而且它可能导致权限错误。举个例子,我们要是在一个写保护的目录里打开一个jpg文件, open(.., 'r+')就失败了。mode可能包含一个扩展字符;让我们还可以以二进制方式打开文件(你将得到字节串)或者文本模式(字符串)

    一般来说,如果文件格式是由人写的,那么它更可能是文本模式。jpg图像文件一般不是人写的(而且其实不是人直接可读的),因此你应该以二进制模式来打开它们,方法是在mode字符串后加一个b(你可以看看开头的例子里,正确的方式应该是rb)。
    如果你以文本模式打开一些东西(比如,加一个t,或者就用r/r+/w/a),你还必须知道要使用哪种编码。对于计算机来说,所有的文件都是字节,而不是字符。

    可惜,在Pyhon 2.x版本里,open不支持显示地指定编码。然而,io.open函数在Python 2.x中和3.x(其中它是open的别名)中都有提供,它能做正确的事。你可以传入encoding这个关键字参数来传入编码。
    如果你不传入任意编码,一个系统 - 以及Python -指定的默认选项将被选中。你也许被诱惑去依赖这个默认选项,但这个默认选项经常是错误的,或者默认编码实际上不能表达文件里的所有字符(这将经常发生在Python 2.x和/或Windows)。
    所以去挑选一个编码吧。utf-8是一个非常好的编码。当你写入一个文件,你可以选一个你喜欢的编码(或者最终读你文件的程序所喜欢的编码)。

    那你怎么找出正在读的文件是用哪种编码写的呢?好吧,不幸的是,并没有一个十分简单的方式来检测编码。在不同的编码中,同样的字节可以表示不同,但同样有效的字符。因此,你必须依赖一个元数据(比如,在HTTP头信息里)来找出编码。越来越多的是,文件格式将编码定义成UTF-8

    有了这些基础知识,我们来写一个程序,读取一个文件,检测它是否是JPG(提示:这些文件头部以字节FF D8开始),把对输入文件的描述写入一个文本文件。

    import io
    
    with open('photo.jpg', 'rb') as inf:
        jpgdata = inf.read()
    
    if jpgdata.startswith(b'\xff\xd8'):
        text = u'This is a JPEG file (%d bytes long)\n'
    else:
        text = u'This is a random file (%d bytes long)\n'
    
    with io.open('summary.txt', 'w', encoding='utf-8') as outf:
        outf.write(text % len(jpgdata))
    

    我敢肯定,现在你会正确地使用open啦!

    展开全文
  • python中open函数打开.py文件,编码错误

    千次阅读 2018-12-23 15:07:27
    python中open函数打开.py文件,会报错 >>> file=open('example.py','r') >>> for line in file:print(line) ... Traceback (most recent call last): File "&...

    问题:

    • python中open函数打开.py文件,会报错
    >>> file=open('example.py','r')
    >>> for line in file:print(line)
    ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 331: illegal multibyte sequence
    

    原因:

    • open函数默认的编码格式是基于系统的,中文windows默认gbk

    解决方案:

    • encoding属性设置为‘utf-8’
    >>> file=open('example.py','r',encoding='utf-8')
    
    展开全文
  • Python的open函数之文件处理!

    千次阅读 2019-10-15 09:42:57
    Python的open函数之文件处理! Python的open函数之文件处理!不喜勿喷,如有建议欢迎补充、讨论! 关于安装和汉化可以观看博主的这篇文章《下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,...

    Python的open函数之文件处理!


    Python的open函数之文件处理!不喜勿喷,如有建议欢迎补充、讨论!

    关于安装和汉化可以观看博主的这篇文章《下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,安装完毕重启VsCode!以及VSCode配置Python开发环境!

    学习使用open函数打开文件并对其进行操作,我们需要了解打开文件并且对文件进行操作的过程是怎么样的,还需要了解打开文件的常见模式,以及对文件句柄操作的的常用方法等等。其中难点是屡清楚文件的编码问题。


    Come on!文件处理的流程:

    1. 打开文件,得到文件句柄并将其赋值给一个变量

    2. 通过文件句柄对文件进行操作(其实文件句柄本身是一个迭代器对象。)

    3. 关闭文件(即释放操作系统分配的内存空间)

    请先创建一个test.txt文件(根目录下)

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-15 09:26:11
    '''
    
    #1、以只读模式打开文件,获得文件句柄并赋值给f变量
    f =open("test.txt","r",encoding="utf-8")
    #2、读取文件
    print(f.read())
    #3、关闭文件
    f.close()
    

    从上述示例中,“r”->只读模式打开文件,接下来看一下文件打开有哪些模式:

    文件模式

    1. 打开文件的模式有:
    • r–>只读模式。默认模式,文件必须存在,不存在则抛出异常。
    • w–>只写模式。不可读,文件存在则删除文件内容,不存在则创建。
    • a–>追加模式。可读,文件存在则追加在文件末尾,不存在则创建。
    1. 打开非文本文件时,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    • rb–>以字节的方式读取文件
    • wb–>以字节的方式写入文件
    • ab–>以字节的方式追加入文件
    1. “+” 表示可以同时读写某个文件
    • r+,可读写文件。【可读;可写;可追加】
    • w+,写读
    • a+,同a

    在了解打开文件的各种打开模式时,需要对文件的编码有一定的了解。

    文件的字符编码

    了解文件编码时我们需了解一下几个点:

    1. 由于文件在硬盘中是以字节的方式存储的,而故在打开文本文件时需要需要指定文件的编码encoding=“编码类型”,写入文件也时需要指定译码格式,encoding="编码类型。"

    2. 文件以什么编码类型写入,必须以什么编码读取。即若文件若以“utf-8”的编码类型写入,就必须以“utf-8”的编码类型读取,否则会发生乱码。

    3. 一个文本文件内,只允许有一种编码类型,否则也会发生乱码。

    4. 字符串数据类型转为字节格式:encode(),字节格式转为字符串数据类型:decode()。

    注:b模式,无需指定编码类型,因为其本身就是直接从内存中读取字节格式,而若想将读取的字节编码以字符串类型显示则需要译码成指定格式,即decode()。

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-09 18:20:20
    '''
    #创建新文件buffer,指定编码格式为utf-8
    f1=open("buffer.txt","w",encoding="utf-8")
    f1.write("hello world.")
    f1.write("你好世界")
    f1.close()
    
    #打开该文件,若以其他编码格式打开则会出现乱码
    f2=open("buffer.txt","r",encoding="gbk")
    print(f2.read())
    f2.close()
    
    #输出为:hello world.浣犲ソ涓栫晫
    

    来点实例:(下面的实例请到上面创建的buffer.txt看效果)

    r模式–>只读模式,读取的文件必须是事先存在的,否则报错

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-09 18:20:20
    '''
    #r-->只读模式
    f =open("buffer.txt","r",encoding="utf-8")
    # print(f.read()) #read->读取文件内容,读取完文件句柄停留在最后
    # print(f.readline(),end="") #逐行读取,读完后文件句柄停留在下一行的行首
    # print(f.readline())
    print(f.readlines()) #逐行读取,并且将每行添加至空列表中,并返回列表
    f.close()
    

    w模式–>只写模式,文件存在则覆盖式写入,文件不存在则创建新文件

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-15 09:35:52
    '''
    
    # w->只写模式
    fw =open("buffer.txt","w",encoding="utf-8")
    fw.write("取代-->原内容]\n") #写入,并且覆盖
    fw.writelines(["hello world.\n","你好,世界。"]) #以列表的方式逐行写入
    fw.close()
    

    a模式->追加模式,文件存在则追加式写入,文件不存在则创建新文件

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-09 18:20:20
    '''
    
    #a->追加模式
    fa=open("buffer.txt","a",encoding="utf-8")
    fa.write("\n这是追加模式,并非覆盖")
    fa.close()
    

    r+模式->读写模式,可读可写,写入是以追加的方式写入

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-15 09:37:17
    '''
    
    #r+->读写模式,必须先读后写
    fr1=open("buffer.txt","r+",encoding="utf-8")
    print(fr1.read())
    fr1.write("\nMy name is YongJia_Chen,I'm 21 years old.") #追加的方式写入
    fr1.close()
    
    #w+->写读模式,先清空再写入
    fr2=open("buffer.txt","w+",encoding="utf-8")
    print(fr2.read())
    fr2.write("\nMy name is YongJia_Chen,I'm 21 years old.")
    fr2.close()
    

    b模式

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-15 09:38:54
    '''
    
    #rb模式
    #由于文件的在硬盘中的存储就是以二进制的方式存取的,而b模式本身就是指定以二进制的字节方式读取, 故不需要指定以何种编码方式读取
    f =open("test.txt","rb")
    data =f.read()
    print(data.decode("utf-8")) #读取出来是字节,故decode转换为字符串格式
    f.close()
    
    #wb模式
    #同理,写入也必须以字节的方式写入。
    f= open("test.txt","wb")
    
    #转换为字节格式的两种方式:
    #①bytes内置函数
    f.write(bytes(b"hello,this world.\n"))
    f.write(bytes("你好,阿中我爱你!\n",encoding="utf-8"))
    
    #②encode()方法
    f.write("你好,世界。".encode("utf-8"))
    #由于python默认以utf-8的编码方式编码的,故若以其他的编码方式写入,则该文件内会出现乱码
    # f.write("哈哈哈,我可真博学。".encode("gbk"))
    f.close()
    

    文件的其他操作方法:

    '''
    @Descripttion: 这是一个文件头注释!
    @version: 1.0.0
    @Company: DCIT-SH
    @Author: Sunny Chen
    @Date: 2019-10-09 18:20:20
    @LastEditors: Sunny Chen
    @LastEditTime: 2019-10-15 09:41:59
    '''
    
    #①、tell()-->查看文件句柄所在位置,以字节为单位。即对于中文以utf-8编码,处理为3个字节。
    f1 = open("demo.txt","r",encoding="utf-8",newline="")
    # print(f1.readlines()) #文件读取一行,光标移动到下一行的最前面
    print(f1.readline())
    print(f1.tell()) #中文为三个字节,同时加上\r\n
    f1.close()
    
    #②seek(int)-->移动文件句柄即光标的位置,也是以字节为单位。
    f2 = open("demo.txt","r+",encoding="UTF-8")
    f2.seek(8) #将文件句柄移至字节为8的位置
    f2.write("你好")
    print(f2.tell()) #获取文件句柄位置
    f2.close()
    
    #③#truncate(int)-->本质为写操作,必须在r+或者a+模式下进行,截取文件内容
    f3 = open("demo.txt","r+",encoding="UTF-8")
    f3.truncate(8)
    # f3.truncate(10) #截取,使用字节为单位截取的,而一个中文在utf-8中用三个字节表示,若截取的字节在一个中文所表示的字节内,则会发生乱码的现象
    f3.close()
    
    #④flush()->刷新,即操作文件时,是将文件加载到内存中进行操作的,而对文件进行操作时,通过flush可以将数据加载回硬盘中。
    f4=open("test.txt","r+",encoding="utf-8")
    f4.write("\nthis is end line")
    f4.flush()
    f4.close()
    

    置于更多的属性的意义我就不在这里列出了,可以参考这篇文章:https://blog.csdn.net/doiido/article/details/43675465

    快去动手试试吧!


    到这里:Python的open函数之文件处理!分享完毕了,快去试试吧!


    最后

    • 更多参考精彩博文请看这里:陈永佳的博客

    • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

    展开全文
  • iconv_open函数

    2012-11-18 22:26:00
    iconv_open函数 iconv_open——申请一个字符集转换的描述符 #include &lt;iconv.h&gt; iconv_t iconv_open(const char* tocode,const char* fromcode) 描述: iconv_open()函数申请一个转换描述符,转换字符...
  • python3 open函数与常见问题

    千次阅读 2018-10-27 00:24:36
    open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一、打开文件 1 文件句柄=open('文件路径','模式') 打开文件时,需要指定文件路径和以何等方式打开...
  • 近期在看Linux内核相关,且之前面试有遇到问**“open函数调用原理”**的问题,今天在这里做一下总结记录。 open函数 open函数主要包含以下两类: int open(const char *pathName, int flags); // 打开文件 int open...
  • python中open函数的使用

    千次阅读 2018-02-04 10:08:00
    一、open()的函数原型open(file, mode=‘r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)从官方文档中我们可以看到open函数有很多的参数,我们常用的是file,mode和encoding,对于其它...
  • python中文件读写--open函数详解

    千次阅读 2021-02-02 23:36:54
    python中open函数详解 在python中文件的读取分为三步走: 读:打开文件 -> 读文件 -> 关闭文件 (有点像把大象放进冰箱需要几步?的问题) 1、open函数 open函数主要运用到两个参数,文件名和mode,文件名是...
  • python-with open函数的用法

    万次阅读 多人点赞 2019-06-28 11:04:17
    open() 函数返回一个file object,通常需要传入两个参数 filename和mode—— open(filename, mode). f = open(‘workfile’, ‘w’) 第一个参数filename是包含文件地址的str 第二个参数mode用来指定文件被使用的方式...
  • XmlHttp.open函数

    千次阅读 2014-11-28 09:02:48
    xmlHttp.Open 建一个新的http请求,并指定此请求的方法、URL以及验证信息 语法 oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword); 参数 bstrMethod http方法,例如:POST、GET、...
  • Python open 默认编码修改

    千次阅读 2020-03-22 11:23:21
    如果在Windows平台使用python,很多时候open函数的默认编码方式为gbk,如果自行编码,可以通过encoding参数来修改为utf-8,但当执行其他人合作完成的代码时,要修改每一个open的参数成本过高。 解决方法:在运行命令...
  • UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 94: ...出现以上错误时,最佳解决办法是在open()函数里加一个encoding='UTF-8' 例如: f = open('C:\\Users\\matre\\Desktop\\Donyuki_CET4_
  • python 3.6中使用open函数遇见的问题

    千次阅读 2018-06-19 17:08:30
    打开文件:标准函数是:open(filename,mode=’r’,buffering=-1,encoding=None, errors=None, newline=None, closefd=True, opener=None)其中 filename是文件的路径名,mode默认为r例子: f=open("C:\Users\C\...
  • wordList = textParse(open('email/spam/%d.txt' % i).read()) 报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in ...在python3中直接使用open函数的话,需要设置编码,不然会报错。 ope...
  • opencv3中的VideoWrite类中的open函数

    千次阅读 2017-11-28 20:40:37
    其中 创建了一个wirter对象,open函数第一个参数表示读取的视频帧所存放的新的文件,第二个参数指的是视频存放的编码格式,这个宏CV_FOURCC采用四个字符作为参数,表示MJPG编码,fps表示每秒的帧数,size表示图像的...
  • 初学python,使用open函数的路径一些坑

    万次阅读 多人点赞 2018-01-04 10:01:20
    做一个小练习:敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,...open一个同py文件同一个目录的文件的时候,用以下: txt = open('/filtered_words.txt','rb') words = txt.readl
  • fp = open(file, mode, encoding) # file:要操作的文件路径, 使用的时候注意目录的拼接 # mode: 打开方式 # encoding: 编码方式 关于第一个参数file需要注意的是: 文件的路径,使用的时候要注意文件目录的拼接,...
  • 在windows平台下使用python内置函数 open() 时发现,当不传递encoding参数时,会自动采用gbk(cp936)编码打开文件,而当下很大部分文件的编码都是UTF-8。 我们当然可以通过每次手动传参encoding='utf-8',但是略显冗余...
  • 改用sqlite3_open16()   C++处理sqlite数据库 sqlite3_open16()的filename参数是UTF-16编码。 sqlite3_open()的filename参数时UTF-8编码
  • 1、open()语法 ...open函数使用一个文件名作为唯一的强制参数,然后返回唯一的文件对象。 open:函数有很多的参数,常用的是file,mode和encoding; file:文件位置,需要加引号; mode文件打开模式,有
  • x264代码剖析(五):encode()函数之x264_encoder_open()函数    我们知道x264源码从主观上分为两大块,一是解析函数parse(),另一个是编码函数encode()。解析函数parse()较简单,并且不涉及H.264编码算法,故...
  • open()函数

    2020-05-13 13:26:20
    open()是python内置函数,可以用来打开文件并对其进行操作。 语法:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 示例: f = open('test') f.close() 在上...
  • apr_file_open函数用法心得

    千次阅读 2013-07-26 19:37:01
    apr_status_t apr_file_open ( apr_file_t **  newf,     const char *  fname,     apr_int32_t  flag,     apr_fileperms_t  perm,     apr_pool_t *  pool    )
  • 上一节我们尝试分析了avformat_open_input函数的源码,这个函数的虽然比较复杂,但是它基本是围绕着创建和初始化一些数据结构来展开的,比如,avformat_open_input函数会创建和初始化AVFormatContext,AVClass ,...
  • Python open()函数 小白|教程

    千次阅读 2019-09-16 08:59:11
    python open函数 open()函数 概念: 打开一个文件,创建一个file对象,相关的函数就可以调用它进行读写 语法: file object=open(file_name[,access_mode][,buffering]) 参数含义: [ ]:可选项 file_name:...
  • #encoding=utf-8 inpath = 'D:/学习/python/python/python就业...fr=open(inpath ,"r") f=fr.read() print f fr.close() 会出现下面的这种异常: IOError: [Errno 2] No such file or directory: 'D:/\xe5\xad
  • Python open() 函数 文件处理

    万次阅读 2015-02-09 20:50:32
    python函数open()。python文件处理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,295
精华内容 68,918
关键字:

open函数编码