精华内容
下载资源
问答
  • Python3中打开文件的方式(With open

    万次阅读 多人点赞 2018-08-05 19:53:16
    使用With Open 函数打开,以及常见的坑 使用方法 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法: with 的作用就是调用close()方法 with open( '/path/to/file', 'r' ) as ...

    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...'            十六进制表示的字节
    
    
    展开全文
  • with open() as f 用法

    万次阅读 多人点赞 2019-09-28 18:26:05
    with open(r'filename.txt') as f: data_user=pd.read_csv(f) #文件的读操作 with open('data.txt', 'w') as f: f.write('hello world') #文件的写操作 相关参数: r: 以只读方式打开文件。文件的指针将会放在...

    常见的读写操作:

    with open(r'filename.txt') as f:
       data_user=pd.read_csv(f)  #文件的读操作

    with open('data.txt', 'w') as f:
       f.write('hello world')  #文件的写操作
       
    相关参数:

    r:    以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
    rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w:    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb:    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    w+:    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a:    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab:    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+:    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    file对象的属性:

    file.read([size])   将文件数据作为字符串返回,可选参数size控制读取的字节数
    file.readlines([size])   返回文件中行内容的列表,size参数可选
    file.write(str)   将字符串写入文件
    file.writelines(strings)   将字符串序列写入文件
    file.close()   关闭文件
    file.closed    表示文件已经被关闭,否则为False

    file.mode    Access文件打开时使用的访问模式
    file.encoding    文件所使用的编码
    file.name    文件名
    file.newlines    未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
    file.softspace    为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用

     

    深度学习入门教程: https://edu.51cto.com/sd/b5af5 

    展开全文
  • Python-with open() as f的用法

    万次阅读 多人点赞 2019-02-01 21:48:15
    with open(r'filename.txt') as f: data_user=pd.read_csv(f) #文件的读操作 with open('data.txt', 'w') as f: f.write('hello world') #文件的写操作 相关参数: r: 以只读方式打开文件。文件的指针将会放在...

    常见的读写操作:

    with open(r'filename.txt') as f:
       data_user=pd.read_csv(f)  #文件的读操作
    
    with open('data.txt', 'w') as f:
       f.write('hello world')  #文件的写操作
       
    

    相关参数:

    r:	以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
    rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w:	打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb:	以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    w+:	打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a:	打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab:	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+:	打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    
    

    file对象的属性:

    file.read([size])   将文件数据作为字符串返回,可选参数size控制读取的字节数
    file.readlines([size])   返回文件中行内容的列表,size参数可选
    file.write(str)   将字符串写入文件
    file.writelines(strings)   将字符串序列写入文件
    file.close()   关闭文件
    file.closed	表示文件已经被关闭,否则为False
    
    file.mode	Access文件打开时使用的访问模式
    file.encoding	文件所使用的编码
    file.name	文件名
    file.newlines	未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
    file.softspace	为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用
    
    
    展开全文
  • Python文件操作,with open as追加文本内容实例

    万次阅读 多人点赞 2017-07-25 11:12:56
    with open('/Users/Mr.Long/Desktop/data.txt', 'w') as f: f.write('hello world') 就这样就完成了文件的写操错(此处用with的格式,可以节省很多不必要的麻烦) 读操作同理,只是做一下微小的变化处理而已 with...

    最常见的读写操作

     

     

    import re
    with open('/Users/Mr.Long/Desktop/data.txt', 'w') as f:
       f.write('hello world')

     

     

    就这样就完成了文件的写操错(此处用with的格式,可以节省很多不必要的麻烦)

     

    读操作同理,只是做一下微小的变化处理而已

     

    import re
    with open('/Users/Mr.Long/Desktop/data.txt', 'a') as f:
       f.write('hello world')

     

     

     


    但是,当继续往文件里追加内容的时候,发现原有的内容都被覆盖了。所以就应该思考一下是不是哪里出错了。幸好百度是个好东西。

     

     

     

    轻微的修改

     

     

    import re
    with open('/Users/Mr.Long/Desktop/data.txt', 'w') as f:
       f.write('hello world')

     

     

    就是操作由'w'改为'a',就完成了。

     

     

    一些正则表达式的关键词

    w:以写方式打开,
    a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    r+:以读写模式打开
    w+:以读写模式打开 (参见 w )
    a+:以读写模式打开 (参见 a )
    rb:以二进制读模式打开
    wb:以二进制写模式打开 (参见 w )
    ab:以二进制追加模式打开 (参见 a )
    rb+:以二进制读写模式打开 (参见 r+ )
    wb+:以二进制读写模式打开 (参见 w+ )
    ab+:以二进制读写模式打开 (参见 a+ )fp.read([size])                    
    

     

     

     

    f.read([size])                     #size为读取的长度,以byte为单位
    f.readline([size])                 #读一行,如果定义了size,有可能返回的只是一行的一部分
    f.readlines([size])                #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
    f.write(str)                       #把str写到文件中,write()并不会在str后加上一个换行符
    f.writelines(seq)                  #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
    f.close()                          #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError
    f.flush()                          #把缓冲区的内容写入硬盘
    f.fileno()                         #返回一个长整型的"文件标签"
    f.isatty()                         #文件是否是一个终端设备文件(unix系统中的)
    f.tell()                           #返回文件操作标记的当前位置,以文件的开头为原点
    f.next()                           #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
    f.seek(offset[,whence])            #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
    f.truncate([size])                 #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

     

     

    展开全文
  • Python With Open

    2017-07-04 17:14:43
    这种读取方式,通过和同学的交流得知with open 方式可以节省文件的close 通过查询资料。使用with open 调用代码更加整洁 也节省了try catch的框框 例子如下 1.读文件 with open(filename) as f:  f.rea
  • python 使用 with open() as 读写文件

    万次阅读 多人点赞 2018-08-24 16:06:45
    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符: &gt;&gt;&gt; f = open('E:\python\python\test.txt', 'r') 标示符'r'表示读,这样,我们就成功地打开了一个...
  • with open可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误,退出运行时环境时也能安全退出文件并给出报错信息。 二、open用法 三、with open用法 如果是配置文件,调用...
  • with open 总是用不了,无论怎样都会报错语法错误 ``` import requests url = 'https://pic.qiushibaike.com/system/pictures/12292/122926302/medium/O6Z3BIKE39GTB6OM.jpg' img_data = requests.get(url = url...
  • python with open读取

    2019-03-28 12:51:52
    with open("urls.txt",'r') as f:
  • 读写文件背景读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序...open()、with open()打开文件要以读文件的...
  • open()和with open() as

    2020-04-22 20:28:19
    open()和with open() as的区别 file = open("test.txt","r") for line in file.readlines(): print line file.close() 这样直接打开文件,如果出现异常,如读取过程中文件不存在或异常,则直接出现错误,close...
  • Python中的文件对象方法open()和with open()open() open()和with open() open() filemame = open('file', mode='r') for line in filename.readlines(): print(line) filename.close()
  • with open嵌套使用

    2019-11-25 10:14:46
    with open('1.txt', 'a+', encoding='utf-8') as f: n = 0 while True: n += 1 if n > 5: break time.sleep(1) f.write('2...
  • Python中with以及with open的用法

    千次阅读 2019-06-04 17:01:43
    with open语句用法: 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现: try: f = ope...
  • with open()用法

    千次阅读 2019-11-25 22:38:54
    with open(r'filename.txt') as f: data_user=pd.read_csv(f) #文件的读操作 with open('data.txt', 'w') as f: f.write('hello world') #文件的写操作 r: 以只读方式打开文件。文件的指针将会放在文件的开头...
  • with open as f

    千次阅读 2019-03-05 22:08:20
    抽取txt文本数据并生成到新的txt文件中 遇到问题1:抽取数据的判断...改善:用with open() as f : 以防结尾处忘记关闭文件。 区别于file=open() file.close() path=r'd:\learning\' filea=r'a.txt' fileb=r'b.txt' v...
  • open()和with open() as的区别

    万次阅读 多人点赞 2018-10-11 14:33:42
    file = open("test.txt","r") for line in file.readlines(): print line file.close() 这样直接打开文件,...with open("test.txt","r") as file: for line in file....
  • open  1,打开文件  file=open("文件名",“读写模式”)  2,操作文件  ***  3,关闭文件 ... 使用open方法,文件操作完毕之后必须关闭,否则长期保持对文件的连接状态,... with open ("文件名",“读...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 247,910
精华内容 99,164
关键字:

withopen