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

    万次阅读 多人点赞 2018-08-05 19:53:16
    python文件读写文件是最常见的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...'            十六进制表示的字节
    
    
    展开全文
  • open函数打开文件方式

    万次阅读 2021-06-01 17:16:52
    r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。 rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+: 打开一个文件用于读写。文件指针将会放在文件...
    r:    以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
    rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w:    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb:    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    w+:    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a:    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab:    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+:    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    展开全文
  • 曾经有一次在idea中不知道点击了哪里,导致每次单击某个文件,这个文件就自动打开了,强迫症表示...经过各种百度终于发现,如何设置Idea单击打开文件或者双击打开文件,同时记录一下如何自动定位文件所在的位置。...
    曾经有一次在idea中不知道点击了哪里,导致每次单击某个文件,这个文件就自动打开了,强迫症表示不服。经过各种百度终于发现,如何设置Idea单击打开文件或者双击打开文件,同时记录一下如何自动定位文件所在的位置。
    展开全文
  • C语言打开文件详解

    千次阅读 多人点赞 2020-02-28 14:10:09
    C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还...

    C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。

    打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还可以记录当前读写到了哪个位置,下次可以在此基础上继续操作。

    	标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的,可直接使用。
    

    使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为:

    FILE *fopen(char *filename, char *mode);
    

    filename为文件名(包括文件路径),mode为打开方式,它们都是字符串。

    fopen() 函数的返回值

    fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回。

    FILE 是 <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。

    如果希望接收 fopen() 的返回值,就需要定义一个 FILE 类型的指针。例如:

    FILE *fp = fopen("demo.txt", "r");
    

    表示以“只读”方式打开当前目录下的 demo.txt 文件,并使 fp 指向该文件,这样就可以通过 fp 来操作 demo.txt 了。fp 通常被称为文件指针。

    再来看一个例子:

    FILE *fp = fopen("D:\\demo.txt","rb+");
    

    表示以二进制方式打开 D 盘下的 demo.txt 文件,允许读和写。

    判断文件是否打开成功

    打开文件出错时,fopen() 将返回一个空指针,也就是 NULL,我们可以利用这一点来判断文件是否打开成功,请看下面的代码:

    FILE *fp;
    if( (fp=fopen("D:\\demo.txt","rb") == NULL ){
        printf("Fail to open file!\n");
        exit(0);  //退出程序(结束程序)
    }
    

    我们通过判断 fopen() 的返回值是否和 NULL 相等来判断是否打开失败:如果 fopen() 的返回值为 NULL,那么 fp 的值也为 NULL,此时 if 的判断条件成立,表示文件打开失败。

    在打开文件时一定要判断文件是否打开成功,因为一旦打开失败,后续操作就都没法进行了,往往以“结束程序”告终。

    fopen() 函数的打开方式

    不同的操作需要不同的文件权限。例如,只想读取文件中的数据的话,“只读”权限就够了;既想读取又想写入数据的话,“读写”权限就是必须的了。

    另外,文件也有不同的类型,按照数据的存储方式可以分为二进制文件和文本文件,它们的操作细节是不同的。

    在调用 fopen() 函数时,这些信息都必须提供,称为“文件打开方式”。最基本的文件打开方式有以下几种:
    在这里插入图片描述

    调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。

    读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:

    	将读写方式放在读写权限的末尾:"rb"、"wt"、"ab"、"r+b"、"w+t"、"a+t"
    	
    	将读写方式放在读写权限的中间:"rb+"、"wt+"、"ab+"
    

    整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:

    	r(read):读
    	
    	w(write):写
    	
    	a(append):追加
    	
    	t(text):文本文件
    	
    	b(banary):二进制文件
    	
    	+:读和写
    

    关闭文件

    文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为:

    int fclose(FILE *fp);
    

    fp 为文件指针。例如:

    fclose(fp);
    

    文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。

    实例演示
    最后,我们通过一段完整的代码来演示 fopen 函数的用法,这个例子会一行一行地读取文本文件的所有内容:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define N 100
    
    int main() {
        FILE *fp;
        char str[N + 1];
    
        //判断文件是否打开失败
        if ( (fp = fopen("d:\\demo.txt", "rt")) == NULL ) {
            puts("Fail to open file!");
            exit(0);
        }
    
        //循环读取文件的每一行数据
        while( fgets(str, N, fp) != NULL ) {
            printf("%s", str);
        }
       
        //操作结束后关闭文件
        fclose(fp);
        return 0;
    }
    
    展开全文
  • NotePad 打开文件 出现中文汉字乱码 解决办法

    万次阅读 热门讨论 2019-08-22 15:13:09
    NotePad 打开文件 出现中文汉字乱码 解决办法 现象: 出现中文汉字乱码: 解决办法: 先别着急用notepad修改编码 1. 用windows系统自带记事本打开, 2 ,选择文件另存为 3. 如果看到:编码是 UTF-8 ...
  • 后台导出打开Excle提示:Excel无法打开文件因为文件或文件扩展名无效 1.一定要检查SQL。特别是条件。 SQL注意传值是否正确,#{}传参是否正确 查看前端响应后台导出类型和接口是否正确.我博客里就有一篇Angular2...
  • dos命令打开文件

    千次阅读 2018-01-31 17:49:45
    如何用dos命令查看文件? 首先通过cd进入文件所在目录,然后执行start命令即可。 【start fileName】:打开文件
  • C# 打开文件对话框

    千次阅读 2019-05-28 16:27:51
    文件打开对话框 //新建一个文件对话框 OpenFileDialog pOpenFileDialog = new OpenFileDialog(); //设置对话框标题 ... pOpenFileDialog.Title = "打开shp文件";... //设置打开文件类型 p...
  • Navicat导入excel的xlsx文件提示无法打开文件

    万次阅读 多人点赞 2018-04-24 22:30:49
    navicat,Navicat for MySQL导入时显示如下信息(无法打开文件...): 解决方案: 1.打开excel文件另存为.xls或者.csv文件,然后再选择对应的格式导入试试。(不建议了,方案3比较好) 如果导入CSV乱码,必须要...
  • 此函数一般用于打开文件,和file_get_contents()函数的作用差不多。一、fopen()函数1、fopen() 函数打开文件或者 URL。如果打开失败,本函数返回 FALSE。打开成功的话,会返回一个资源。2、fopen(filename,mode,...
  • IntelliJ IDEA 快速打开文件

    万次阅读 2018-10-11 19:32:56
    在IntelliJ IDEA中Ctrl + Shift + N是一组非常强大的快捷键,用以打开文件   在使用这组快捷键时,可以指定直接打开某一文件到某一行,如图         一般我们在调 页面或CSS,根据控制台找异常的时候...
  • python下打开文件的几种方式,以及优先推荐使用的写法。
  • vscode打开文件乱码,自动识别文件编码

    千次阅读 多人点赞 2019-03-22 14:40:18
    我们的vscode打开文件默认是utf-8编码,当我们打开其他编码文件(例如gb2312)时就会产生乱码现象。 这个时候我们希望能够看到正常的代码,点击右下角的UTF-8 在上面便会弹出窗口,我们点击【使用编码重新打开】就...
  • 一:结论 1.两个进程中分别产生生成两个独立的fd 2.两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性 3.进程可以通过系统调用对文件加锁,从而实现对文件...二:文件描述符与打开文件的关系? 内核...
  • 有许多情况下,我们需要查看一个进程当前打开了哪些文件,反过来我们也希望知道某... fuser find files or sockets' user 格式:fuser [选项] fname -k 如果找到打开文件的进程,则发送SIGKILL杀死此进程,通过-...
  • f = open('buffer.py','w+')#打开文件,如果没有该文件则新建文件 f.write(data)#写入文件 f.close()#关闭文件file1 = open('/usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/telemetry/...
  • java实现打开文件和保存文件功能

    千次阅读 2015-08-11 19:52:24
    本人是新手,在学习java如何打开文件和保存文件,功能很简单,实现起来也不麻烦。 附源代码: public class FileOpenAndSave extends JFrame{ private static final long serialVersionUID = 4029562126308556571L; ...
  • 1.MFC打开文件并按行读取文件内容 void CFileDlg::OnBnClickedButtonFileRead() { vector v_str; CFileDialog fileDlg(TRUE); fileDlg.m_ofn.lpstrTitle = L"Open File"; fileDlg.m_ofn.lpstrFilter = L"Text ...
  • 关于fopen打开文件失败的问题

    万次阅读 2018-11-02 13:23:13
    关于fopen打开文件失败的问题!求大佬救救小白;
  • Python win32ui windows 打开文件对话框

    千次阅读 2019-07-09 13:53:16
    Python win32ui windows 打开文件对话框 by 郑瑞国 ''' import win32ui dlg= win32ui.CreateFileDialog(1)# 1表示打开文件对话框 dlg.SetOFNInitialDir('E:/Python')# 设置打开文件对话框中的初始显示目录 dlg....
  • 本文讲述了如何配置让 Visual Studio Code 打开文件始终在新标签页打开......
  • 自己的APP调用第三方打开文件主要是使用 UIDocumentInteractionController 类 并实现 UIDocumentInteractionControllerDelegate的代理方法@interface ViewController ()<UIDocumentInteractionControllerDelegate>@...
  • C# 打开文件所在路径并定位到文件

    千次阅读 2017-09-14 10:13:08
    打开文件所在路径并定位到文件
  • webstorm打开文件路径方法

    千次阅读 2019-03-25 18:12:17
    ws打开文件路径方法 步骤 选中你要找的文件 右键 点击show in explorer 效果图
  • 用notepadd++打开文件时,总是打开上一次打开的文件,弄得我很烦 自从用了du
  • 从TFS上下载一个word文件,然后通过office打开此文件,一直报错,如下图:接连下载几个文件都是这样,打开“Word在视图打开文件时遇到错误”,但是打开本地创建的文件,不会出现这样的错误,将文件发给同事,通过wps...
  • 桌面新建excel表格后,打开时,提示“Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配” 。 解决方法如下: 1.首先找一个能打开的Excel表 把里面...
  • vscode 设置自动展开打开文件的目录

    千次阅读 2019-05-17 10:48:41
    vscode 设置自动展开打开文件的目录 打开设置 搜索Auto Reveal,选中Auto Reveal就好了
  • QT笔记(6)——Qt打开文件与保存文件

    万次阅读 多人点赞 2017-09-13 10:59:48
    Qt打开文件与保存文件,首先打开文件,qt给了一个方法直接调用就好,如下: static QString getOpenFileName
  • 打开文件时提示“您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开该文件?”,卸载Office 2007后重装也不行。这是什么原因呢

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,887,774
精华内容 1,555,109
关键字:

打开文件