精华内容
参与话题
问答
  • 本函数是打开一个文件并返回文件对象。如果文件不能打开,抛出异常OSError。参数file是一个字符串表示的文件名称,或者一个数组表示的文件名称。文件名称可以是相对当前目录的路径,也可以是绝对路径表示。...

    本函数是打开一个文件并返回文件对象。如果文件不能打开,抛出异常OSError

    参数file是一个字符串表示的文件名称,或者一个数组表示的文件名称。文件名称可以是相对当前目录的路径,也可以是绝对路径表示。

    参数mode是指明打开文件的模式。默认值是’r’,表示使用文本的方式打开文件来读取。

    ‘r’表示打开文件只读,不能写。

    ‘w’表示打开文件只写,并且清空文件。

    ‘x’表示独占打开文件,如果文件已经存打开就会失败。

    ‘a’表示打开文件写,不清空文件,在文件后尾追加的方式写入。

    ‘b’表示二进制的模式打开文件。

    ‘t’表示文本模式,默认情况下就是这种模式。

    ‘+’打开文件更新(读取或写入)。

     

    缺省时的模式就相当于’rt’。比如’w+b’就是打开文件进入读写,把文件清空;’r+b’打开文件,但不把文件清空。

     

    参数buffering是一个可选的参数,用来表示缓冲区的策略选择。设置为0时,表示不使用缓冲区,直接读写,仅在二进制模式下有效。设置为1时,表示在文本模式下使用行缓冲区方式。设置为大于1时,表示缓冲区的设置大小。如果参数buffering没有给出,使用默认时,会采用下面策略来选择:

    1)对于二进制文件模式时,采用固定块内存缓冲区方式,内存块的大小根据系统设备的分配的磁盘块来决定,如果获取系统磁盘块的大小失败,就使用内部常量io.DEFAULT_BUFFER_SIZE定义的大小。一般的操作系统上,块的大小是4096或者8192字节大小。

    2)对于交互的文本文件(采用isatty()判断为True)时,采用一行缓冲区的方式。其它文本文件使用跟二进制一样的方式。

     

    参数encoding是指明对文件编码,仅适用于文本文件。如果不明编码方式,默认是使用locale.getpreferredencoding()函数返回的编码方式。

     

    参数errors是用来指明编码和解码错误时怎么样处理。不能在二进制的模式下使用。

    1)当指明为’strict’时,编码出错则抛出异常ValueError

    2)当指明为’ignore’时,忽略错误。

    3)当指明为’replace’时,使用某字符进行替代模式,比如使用’?’来替换出错的。

    4)其它相应还有surrogateescape/xmlcharrefreplacs/backslashreplace

     

    参数newline是用来控制文本模式之下,一行的结束字符。可以是None’’,\n\r\r\n等。

    当在读取模式下,如果新行符为None,那么就作为通用换行符模式工作,意思就是说当遇到\n\r\r\n都可以作为换行标识,并且统一转换为\n作为文本输入的换行符。当设置为空’’时,也是通用换行符模式工作,但不作转换为\n,输入什么样的,就保持原样全输入。当设置为其它相应字符时,就会判断到相应的字符作为换行符,并保持原样输入到文本。

    当在输出模式时,如果新行符为None,那么所有输出文本都是采用\n作为换行符。如果设置为’’或者\n时,不作任何的替换动作。如果是其它字符,会在字符后面添加\n作为换行符。

     

    参数closefd是用来当给一个文件句柄传进来时,而当退出文件使用时,而不对文件句柄进行关闭。如果传递一个文件名进来,这个参数无效,必定为True方式。

     

    参数opener是用来实现自己定义打开文件方式。这种使用方式比较复杂,比如打开相对目录的文件,可以采用下面的例子方式:

    >>> import os

    >>> dir_fd = os.open('somedir', os.O_RDONLY)

    >>> def opener(path, flags):

    ...     return os.open(path, flags, dir_fd=dir_fd)

    ...

    >>> with open('spamspam.txt', 'w', opener=opener) as f:

    ...     print('This will be written to somedir/spamspam.txt', file=f)

    ...

    >>> os.close(dir_fd)  # don't leak a file descriptor

     

    例子:

    #在C盘下面有一个文件abc.txt。
    #open()
    with open(r'c:\\abc.txt') as demo:
        for line in demo:
            print(line)
            
    
    

    结果输出如下:

    this is test file.

     

    1,2

     

    3

     

    4

     

    8888888888888

     

     

    蔡军生  QQ:9073204 深圳
    展开全文
  • 手册直译因为该函数的官方参考手册引文篇幅过大,不再本文中体现,如有需要查询原引文内容的,详见官方手册。手册直译打开发文件并返回相应的文件对象,如果文件不能打开,则引发OSError异常。 ...

    因为该函数的官方参考手册引文篇幅过大,不再本文中体现,本文的内容均翻译自官方手册,如有需要查询原引文内容的,详见官方手册。另外,本文中涉及的链接,会在发布相应的文章后陆续进行补充。

    参数形式

    open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

    参数使用说明

    打开发文件并返回相应的文件对象,如果文件不能打开,则引发OSError异常。

    file

    file可以是字符串或字节对象,用于给出要打开文件路径名(绝对或相对当前工作目录)或要打包文件的整数文件描述符。如果给定某个文件描述符,当返回的I/O对象关闭时那么它会被关闭,除非closefd设为False。

    mode

    mode是一个可选的字符串参数,用来指定文件打开模式。默认值为’r’,表示以文本模式只读打开。其他常用值有:’w’可写(若文件已经存在则截断),’x’单独创建,’a’添加(在一些Unix系统上,这意味着不管当前查找位置,所有写入添加到文件尾部)。在文本模式下,如果没有指定编码,那么编码的使用依赖于平台:调用locale.getpreferredencoding(False)来获取当前本地编码(对于读写原始字节,使用二进制模式,且不用指定编码)。可用的mode有:

    字符 含义
    ‘r’ 只读打开(默认)
    ‘w’ 写入打开,首先截断文件
    ‘x’ 单独创建打开,如果文件已存在则失败
    ‘a’ 写入打开,如果文件存在则添加到尾部
    ‘b’ 二进制模式
    ‘t’ 文本模式(默认)
    ‘+’ 更新方式(读、写)打开磁盘文件
    ‘U’ 通用换行模式(已过时)

    默认模式’r’(只读打开,等同于’rt’)。对于二进制读写访问,’w+b’模式打开,并将文件截断为0字节。’r+b’不截断打开文件。

    Python区分二进制和文本I/O。文件以二进制模式打开(mode参数含’b’),不进行任何解码,将内容以bytes对象返回。在文本模式下(默认,或mode参数含’t’),返回的文件内容是str,将使用平台依赖的编码或指定编码首先对字节进行解码。

    注意:Python不依赖底层操作系统的文本文件概念,所有的处理有Python自身完成,因此是具有平台独立性的。

    buffering

    buffering是一个整数可选项,用于设置缓冲策略,传入0关闭缓冲(仅允许在二进制模式下),1选择行缓冲(尽用于文本模式),大于1的整数用于指示某个固定大小的块缓冲区的字节大小。当没有给定buffering参数时,默认缓冲策略运行如下:

    • 二进制文件在固定大小的块内缓冲,缓冲区大小的选择,会使用启发式的方法来尝试决定底层设备的“块尺寸“,并退回至io.DEFAULT_BUFFER_SIZE。在很多系统上,缓冲区通常的字长是4096或8192。
    • ”交互式“文本文件(对于isatty()返回True的文件)使用行缓冲,其他文本文件使用的策略与上面二进制文件的相同。

    encoding

    encoding是用于编码或解码文件的编码名称。该参数应仅用于文本模式,默认的编码是平台依赖的(无论locale.getpreferredencoding()返回什么),但所有Python支持的文本编码都可使用,支持的编码列表参考codecs模块。

    errors

    errors是一个字符串可选项,用于指定如何操作编、解码的错误(不能用于二进制模式)。目前能找到各种的标准错误处理程序(在错误处理程序中列出),然而用codecs.register_error()注册的所有错误处理名也有效,这些标准名称包括:

    • ‘strict’,如果有编码错误,引发ValueError异常, 默认值None有同样效果。
    • ‘ignore’ ,忽略错误。注意:忽略编码错误可能导致数据丢失。
    • ‘replace’,会导致在出现畸形数据的地方插入替代符号(例如’?’)。
    • ‘surrogateescape’ ,会将任何不正确的字节以Unicode Private Use Area(区间U+DC80到U+DCFF)中的代码点表示。当写入数据时,若使用surrogateescape错误处理程序,这些私有代码点随后会转化回相同的字节,这对于处理未知编码文件非常有用。
    • ‘xmlcharrefreplace’ 只支持写入文件,编码不支持的字符会用适当的XML字符引用&#nnn;进行替换。
    • ‘backslashreplace’ 可以用Python的反斜杠转义序列替换畸形数据。
    • ‘namereplace’ (仅支持写入),用\N{…}转义序列替换不支持的字符。

    newline

    newline控制通用换行模式如何运行(只支持文本模式),该值可以是None, ”, ‘\n’、’\r’和’\r\n’,以如下方式运行:

    • 当从流读取输入时,如果newline值为None,通用换行模式启用,输入中的行尾可以是’\n’、’\r’或’\r\n’,这些会在返回给调用者前转换为’\n’;如果参数值是”,通用换行模式启用,但是行尾不做转换返回给调用者;如果它有任意其他合法值,输入行以给定字符串结束,行尾不做转换返回给调用者。
    • 当把输出写入到流时,如果newline值为None,任意写入的’\n’将转换为系统默认的行分隔符(详见os.linesep);如果newline值为”或’\n’,不进行转换;如果newline值为其他任意合法值,所有写入的’\n’字符将转换为给定字符串。

    closefd

    如果closefd为False,且给定文件描述符(而不是文件名),那么当文件关闭时底层文件描述符将保持打开。如果给定文件名,closefd必须为True(默认)。否则将引发错误。

    opener

    opener可以传递调用一个自定义打开器,然后通过调用opener获取文件对象的底层文件描述符。opener必须返回一个打开文件描述符(传递os.open与传递None产生的功能相似)。

    新创建的文件是非继承的。

    相较一个给定的目录,以下的实例使用了os.open()函数的dir_fd参数来打开一个文件:

    >>>
    >>> import os
    >>> dir_fd = os.open('somedir', os.O_RDONLY)
    >>> def opener(path, flags):
    ...     return os.open(path, flags, dir_fd=dir_fd)
    ...
    >>> with open('spamspam.txt', 'w', opener=opener) as f:
    ...     print('This will be written to somedir/spamspam.txt', file=f)
    ...
    >>> os.close(dir_fd)  # 不要泄露文件描述符

    其他

    open()函数返回的文件对象类型依赖于mode

    • open()以文本模式(’w’, ‘r’, ‘wt’, ‘rt’, etc.)打开一个文件时,它返回io.TextIOBase(特殊形式为io.TextIOWrapper)的一个子类;
    • 当用缓冲以二进制模式打开一个文件时,返回的类是io.BufferedIOBase的一个子类,确切的类差异情况包括:

    • 当禁用缓冲时,返回原始流、io.RawIOBase的子类和io.FileIO

    可以参考其他的文件处理模块,例如:fileinputio (声明open()的类)、osos.pathtempfileshutil

    版本变更内容

    version 3.3变更: 增加opener参数 ;增加’x’模式;以往IOError异常现更名为OSError;现在如果以单独创建模式(’x’)打开的文件已经存在的话,将引发FileExistsError。

    version 3.4变更: 文件现在是非继承的了。

    从version 3.4开始不建议的,且将会在version 4.0移除的内容: ‘U’模式。

    version 3.5变更: 如果系统调用中断,且信号处理程序没有引发异常,那么现在该函数将重试系统调用(替代引发InterruptedError异常)。

    version 3.5变更: 增加’namereplace’错误处理程序。

    拓展阅读

    文件对象
    bytes
    str
    io.DEFAULT_BUFFER_SIZE
    isatty()
    locale.getpreferredencoding()
    codecs
    错误处理程序
    codecs.register_error()
    os.linesep
    os.open
    io.TextIOBase
    io.TextIOWrapper
    io.BufferedIOBase
    io.BufferedReader
    io.BufferedWriter
    io.BufferedRandom
    io.RawIOBase
    io.FileIO
    fileinput
    io
    os
    os.path
    tempfile
    shutil

    展开全文
  • insert_final_newline = false trim_trailing_whitespace = true [*.py] indent_size = 4 [*.md] trim_trailing_whitespace = false [{Makefile,Makefile*,*.mk}] indent_style = tab indent...
  • 保存后,发现打开文件都是乱码,后面通过查找资料发现encoding参数要改为“utf_8_sig”才行,“utf-8”是不行的

    保存后,发现打开文件都是乱码,后面通过查找资料发现encoding参数要改为“utf_8_sig”才行,“utf-8”是不行的

    展开全文
  • 在网上寻找答案一直没有找到,我写入文件的代码是这样的:def writeList2CSV(myList1,filePath): ... with open(filePath,'w',encoding='utf-8',newline='') as f: writer=csv.writer(f) for items in myL...

    在网上寻找答案一直没有找到,我写入文件的代码是这样的:

    def writeList2CSV(myList1,filePath):
        try:
            with open(filePath,'w',encoding='utf-8',newline='') as f:
                writer=csv.writer(f)
                for items in myList1:
                    for item in items:
                        writer.writerow(item)
        except Exception :
            print("数据写入失败,请检查文件路径及文件编码是否正确")

    这个是在python3.5的环境下写的,在服务器上运行的时候try里运行到with open就不走了,直接跑到exception里。

    后来去掉try让它自动报错,发现是参数个数问题,服务器是在python2.7环境下,with open()这方法只允许给3个参数,而我给了4个,结果就不运行那句,后来去掉后面俩参数就好了。


    教训就是:写程序的时候也不能总用try,这样debug的时候它也不会直接抛出错误,也就没有办法定位问题。

    展开全文
  • open('zhihu.csv','w',newline='',encoding='utf-8-sig') 这个和csv文件的bom有关,参考下面信息 下面是在练习14的基础上改一下编码,效果见下面截图 1 # 爬取知乎大v张佳玮的文章“标题”、“...
  • oneAPI Deep Neural Network Library (oneDNN) This software was previously known as Intel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL-DNN) and Deep Neural Network Library (DNNL). ...
  • Python换行符问题:\r\n还是\n?

    万次阅读 2018-04-08 10:08:34
    这是一个很经典的问题。...解决方法:Python 2(PEP 278 -- Universal Newline Support,感谢毕勤的补充):1)如果不是txt文件,建议用wb和rb来读写。通过二进制读写,不会有换行问题。2)如果需要明文内容,请用...
  • Newline breaks

    2020-11-28 13:19:51
    <p>While setting text that has newline(s) via Markwon to EditText, I have found some issues atm. <ul><li>A single newline doesn’t show up.</li></ul> <pre><code>java Markwon markwon = Markwon....
  • 翻译 警告:反斜杠和换行符以空格分隔! 删除反斜杠符""后面的空格,按方向键右键查看 在delete删除.
  • 如何解决warning: no newline at end of file?

    千次阅读 2017-07-12 11:00:48
    编写代码的时候, 是在共享文件夹Windows下编辑的, 保存后放在linux系统下编译. 英文的意思就是说文末没有换行符。 windows中按下回车键等效于"\r\n", 在linux中按下回车键等效于'\n', 在mac中按下回车键等效于'\r...
  • Newline Mode

    2020-11-29 12:07:38
    <p>A Newline Mode must be run (just once) after pressing Enter in Indent Mode. This is because pressing "Enter" is an action that communicates intent, which cannot be implied from text alone. ...
  • 原文地址:newline at the end of file">Cfree编译下警告no newline at the end of file作者:Butterfly编写程序完成后在程序尾留出一个空行即可。
  • 最近用Windows svn, 比较的时候出现cannot show diff because of inconsistent of newline in the file, 在网上找了一下, 给出的分析结果是:文件格式原因。 但是, 没有看到有解决方法, 于是想起之前用svn的层前...
  • Eat my newline

    2020-11-30 04:52:32
    eat my newline" as Jinja has "-%}" and "{%-". <p>This is very usefull when using Pongo for non-web development templating or if you're a neat freak. <p><strong>Input:</strong>...
  • s a single newline in the markdown it should be parsed as a single newline in the Bypass text, but instead it gets turned into a space because of <pre><code> if (element.size() == 0 &&...
  • Newline characters

    2020-11-22 01:08:50
    <div><p>, you should change \r\n to \n in your pulled files.</p><p>该提问来源于开源项目:JamesHeinrich/getID3</p></div>
  • Indentation on newline

    2020-11-22 21:35:29
    and hit the Return key, a newline is created, but there is no indentation, the cursor is at the beginning of the line and there are no tabs or spaces even behind the cursor. If I however delete that ...
  • newLine函数

    2012-05-04 21:19:00
    void newLine(istream& inStream = cin) //默认参数为cin  {  char symbol;  do  {  inStream.get(symbol);  }while(symbol != '\n');  }    newLine();  newLi...
  • <div><p>On linux running a bitwarden command outputs an extra newline. The relevant prices of code are as follows: <p><a href=...
  • Trailing newline in metadata

    2020-11-22 06:26:23
    This final newline is ignored in <code>color, but it is taken into account in <code>displayname</code>. <p>I suggest to always ignore a trailing newline.</p><p>该提问来源于开源项目:pimutils/...
  • Invalid newline character

    2020-11-26 16:57:07
    <div><p>Hi. When I convert a bgl to mtxt format, all entries end ... newline character instead of "\r\n" Please fix this issue. thanks</p><p>该提问来源于开源项目:ilius/pyglossary</p></div>
  • HtmlBlock and newline

    2020-11-29 03:57:07
    t getting any trailing newline, which seems better IMO since this means the newline char would be issued in another Node. <p>What's the rationale for including the trailing newline in the ...
  • newline in zsh after 0.7.0

    2020-11-26 18:39:38
    <div><p>in versoin 0.7 onwards after using anything in tty-prompt my zsh shell starts adding newlines after return: <p>0.6.0 version: ...<p>0.7.0 version: ...<p>I do not have enough shell knowledge to ...
  • <p>Should have a newline for unordered/bullet list <p>Using: <p>Writing the character *, -, &#8226;</code> unable to have a new line for each item <p><img width="244" alt="Screen Shot 2020-08-21...
  • fetch-newline-delimited-json

    2020-11-27 19:03:47
    <div><p>This proposal is to create a <code>fetch-newline-delimited-json</code> package who can be used to make a request to a <strong>newline-delimited-json</strong> service and provide some way of ...
  • <div><p>It seems that my newline formatting inside of Sublime Text is not getting uploaded to Evernote. I.e., newline space between paragraphs is removed. <p>This is what a note looks like in the text...

空空如也

1 2 3 4 5 ... 20
收藏数 5,477
精华内容 2,190
关键字:

newline