精华内容
下载资源
问答
  • print(val)文件处理首先给你一个文件,或者自己建立一个文件,那如何查看文件的内容呢?1.安装个文本编辑器2.选中右键,利用文本编辑器软件打开3.查看OR写入4.保存关闭正常的文件如上面的步骤,怎么用Py...

    原博:https://www.cnblogs.com/surewing/p/9130453.html

    • 列表项

    三元运算符号:

    a=3
    b=7
    val=a if a>b else val=b
    print(val)

    文件处理

    首先给你一个文件,或者自己建立一个文件,那如何查看文件的内容呢?
    1.安装个文本编辑器
    2.选中右键,利用文本编辑器软件打开
    3.查看OR写入
    4.保存关闭

    正常的文件如上面的步骤,怎么用Python打开这个文件,修改删除

    1.怎么样用Python读一个文件;(自己在桌面建了一个文件叫test123)

    f =open(file='D:/Users/tufengchao/Desktop/test123',mode='r',encoding='utf-8')
    data = f.read()
    f.close()
    • file是路径
    • mode 是打开的模式,r-读,w-写,rb-二进制
    • encoding 编码格式
    • read() 是读一个文件
    • close()是读了一个文件然后关闭

    889e0469a5823537c8aef7cde526ffa3.png
    • 这里解释一下这个问题,首先我们的文件在硬盘里面是以二进制存储格式,最终读到内存是不是要转换我们能看懂的东西,从二进制转化为我们能看懂的内容,是有个对应的关系的,是按照字符编码来的,这个文件是按照gbk存储的,结果读的时候是按照utf-8来读的,所以在对应的编码表里面找不到对应的关系;
    • 我们平时使用的Word,也是这样的,只是微软帮你转换好了,小白用户是看不到这里面的转换的,直接使用就OK了
    • 在Python里面,你一定要记住你自己的文档是什么格式的,读的时候用什么格式的读,你要告诉Python你之前的是什么格式,要以什么格式打开,如果不指定,Python3默认的编码格式就是utf-8,(只要出现上述的报错,就是编码格式错误);
    • 如果不知道自己的文件原来的编码格式可以使用pycharm打开,pycharm右下角会自动给你检测的;

    文件处理二进制模式:

    python3里面所有的字符都是utf-8的形式,如果在打开一个文件的时候我不知道这个编码怎么办?

    那我们就不指定encoding的编码,那么Python3默认就是utf8但是这样也不行,同时我们要改变读的模式,才可以,r就是文本模式,可以直接读取字符串的,如果用户不知道文件的格式的话可以不指定编码格式,同时直接使用rb的模式,就是硬盘怎么存储的你就怎么存到内存,直接以二进制的形式,就可以了;

    f=open(file='D:/Users/tufengchao/Desktop/test123',mode='r',encoding='utf-8')
    data=f.read()
    print(data)
    • 如上述我指定了编码格式会报错:binary mode doesn't take an encoding argument
    f=open(file='D:/Users/tufengchao/Desktop/test123',mode='r',)
    data=f.read()
    print(data)
    • 以上则不会报错
    • 基本二进制就是不给人家看的,例如视频的格式,等等就是二进制的;
    • 基本来说 rb的模式就是不给人看的,就是网络传输用的,硬盘里面存的是什么读出来的就是什么;

    以上如果用户就是想看呢,怎么办呢?二进制的传来传去的最终有人会使用这个文件的,不管什么文件传来传去如果记不得什么格式怎么办呢?

    • 问题:在传输的时候对方不知道是以什么格式传给用户,传来传去彼此都忘了什么格式:
    在编码的时候:utf8:是3个字符,gbk是2个字符,每个字符数字对应的字符,一段2进制串,如果10个字节全部都是中文,永远不能是utf-8,但是又要存成中文,就只能是gbk了,第三方的工具箱,会自动检测这段文字是什么编码。
    我们需要用到一个第三方的工具包叫:**chardet**

    教大家如何安装chardet

    • pip3 install chardet
    • 然后代码输入:
    import chardet
    f= open('log',mode='rb')
    data=f.read()
    f.close()
    result=chardet.detect(open('log',mode='rb').read())
    print(result)
    • 通过上述我们可以知道什么的编码了,然后就可以通过具体的编码来看了;** 备注 **以上文件的路劲都是自己的本地,如果需要练习,大家可以自己创造文件;

    文件处理写模式操作文件:

    • 如果文件特别大,一read就全部读出来,如果内存小怎么办?
      1.可以不可以每次读一点,然后丢掉一点,然后在读一点?答案是当然可以了
    f=open('D:/Users/tufengchao/Desktop/test123','r',encoding='utf-8')
    for line in f:
        print(line)
    f.close()

    39cf7ad4f9833b5346c6c4bf3bd045dc.png
    • 如上述的代码执行的结果中,竟然每行下边会有空格,为什么会有空格呢?
      1.因为prit本身就会换行;如上述的代码换成:
    f=open('D:/Users/tufengchao/Desktop/test123','r',encoding='utf-8')
    data=f.read()
    print(data)

    b62b552f3dfd76b86c34596ca33097bf.png

    就不会有问题了,
    如果是:

    for line in f:
        print(line)

    就会换行

    写文件:

    f=open('D:/Users/tufengchao/Desktop/test123','w',encoding='utf-8')
    f.write('老北京科技大学,微信号:xxx')
    f.close()

    如上述就是写的格式,(备注:文件可以自行准备,写的内容可以自己写入,同时这里面的编码要根据你要编写的文件的编码格式,并不是所有文件都是utf8,有可能是gbk等等)

    f=open('D:/Users/tufengchao/Desktop/test123','wb')
    f.write('第二梦')
    print(f.read())

    会发现,之间的文件内容,现在只有:“第二梦”了
    w不是修改,是创建了一个新的文件名字,如果和原来的旧文件有名字一样,原来的文件就是清空,如果是文件名字不一样就是新建,所以我们要是小心使用:w

    追加模式

    • 如果对一个文件我要修改一个条,或者追加一个内容:
    f=open('D:/Users/tufengchao/Desktop/test','a',encoding='utf-8')
    f.write('我要追加哈哈!!!!')
    f.close()
    • 注意:文件操作的时候,以 “a” 或者“ab”模式打开,则只能追加,即:在原来的内容尾部追加内容
    • 写入硬盘时候,必须是:0101010101,打开时候需要注意:
    • ab,写入时,需要直接传入以某种编码的010101010 ,即:字节类型
    • a 和encoding 写入时需要传入Unicode字符串,内部会根据encoding制定的编码将Unicode字符串转换为该编码的01001010101

    读写混合模式

    • r+ 就是读写混合模式:
    f=open('D:/Users/tufengchao/Desktop/test','r+',encoding='utf-8')
    data=f.read()
    print(data)
    f.write('混合模式啦!!!!')
    data1=f.read()
    print(data1)
    f.close()
    • 注意上述的第二个,read()没有打印出来对应的插入的内容,
    • 不是每次读完了,都重新读,就类似一个光标,光标在开始时候光标在第一个位置,然后read之后光标在最后,然后写的时候,结果光标又定位在最后了,所以读的时候从光标的位置往后读,所有读出来的结果就是空的,没有读出来;
    • 写读模式:w +
    • 读写和写读 听上去是一样的,其实完全不一样,读写模式:先读写,写读:是写模式打开,是写打开写,然后在读;(写:可以把原来的覆盖掉的)
    • w+基本上应用场景比较少;

    文件操作的其他的基本功能:

    def fileno(self,args,**kwargs):返回文件句柄在内核中的索引值,以后做IO多路复用的时候可以用到;def flush(self ,args,**kwargs):把文件从内存buffer里面强制刷新到硬盘上,例如:

    f=("f_flush_test.txt",'w')
    f.write("ntest")
    • 这时候打开文件f_flush_test.txt,发现是空白的:why?
    • 主要是写入的内容会先存入内存,然后在从内容写入硬盘,因为存入内存要比写入硬盘快很多;
    • 如上述的代码后边加入:f.close()就可以在文件f_flush_test.txt这个文件里面看到了;so每写一个字符都要往硬盘里面写的话会让速度很慢,所以就搞了个缓存功能,buffer,这个是可以改的,满了就会刷到硬盘里面,
      1.如果数据特别的大,但是有突然断电了这个怎么办呢?
      2.默认是buffer满了自动刷,现在要求强制刷,有没有这么的功能呢?
    f=("f_flush_test.txt",'w')
    f.write("ntest")
    f.flush()

    3.这时候打开文件是不是就有了刚才写的内容了;

    def readable(self ,args ,**kwargs):判断是否可读def readline(self ,args,kwargs):只读一行,遇到r or n为止def seek(self ,*args ,kwargs):
    把文件的光标移动到制定的位置;

    • 注意:seek的长度是按照字节算的,字符编码存每个字符所占的字节长度不一样。
    • 如:我爱祖国,用gbk存就是2个字节,用utf-8存就是3个字节,因此以gbk打开时,seek(4)光标就会定位在“爱”之后
    • 如果是utf-8,seek(4)会导致,拿到“爱”这个字的一部分字节,打印的话会报错,因此处理剩下的文本时发现用
    • def seekabale(self,*args,**kwargs)判断文件是否可以进行seek操作
    • def tell(self,*args,**kwargs)返回当前文件操作的光标位置
    • read()是按照字符来读的,tell()和seek()是按照字节来的
    • def truncate(self,*args,**kwargs)按照指定的长度截取文件
    • def writable(self,*args,**kwargs)判断是否可以写
    • word 在读取大文件的时候会慢,是因为他把硬盘的文件全部读取到内存,然后在内存中进行增删改查,在内存中就可以随便的修改了,就像列表一样,可以随意的修改东西;
    • 文件特别的大,会不会内存爆掉呀?
    • 有没有即不爆掉内存,又可以存到内存,我可以边读边修改,先读出来一点,然后检测一下是否修改,如果修改,就修改了放到新文件,如果不修改,就直接放到新文件里面,从一边读往一边写,这样就不会占内存了,就多站点硬盘;
    f_name='f_test.txt'
    f_new_name ='%s.new' %f_name
    old_str='wo'
    new_str='haha'
    f=open(f_name,"r",encoding='utf8')
    f_new =open(f_new_name,"w",encoding='utf-8')
    for line in f:
        if old_str in line:
            line=line.replace(old_str,new_str)
        f_new.write(line)
    f.close()
    f_new.write(line)
    f.close()
    f_new.close()
    os.rename(f_new_name,f_name)
    展开全文
  • 文件操作--二进制文件读入

    千次阅读 2018-06-26 21:14:23
    HomeWeb BoardProblemSetStandingStatusStatistics OJ系统新功能测试中,如有问题请联系 17865569030 17865569180 17865571035 尽量不要在上课时间打电话Problem A: 文件操作--二进制文件读入Time Limit: 1 Sec ...
    HomeWeb BoardProblemSetStandingStatusStatistics
    OJ系统新功能测试中,如有问题请联系 17865569030 17865569180 17865571035 尽量不要在上课时间打电话

    Problem A: 文件操作--二进制文件读入

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 3022  Solved: 906
    [Submit][Status][Web Board]

    Description

    现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占一行。

    前5行学生信息为:
    akdh 13773 84 83 66
    fjka 30257 15 14 88
    sfhklas 61281 87 8 31
    hfu 38635 55 50 60
    iwehfk 92803 54 6 77

    Input

    要输出行号的整数序列,以0作为结束标志。

    Output

    输出学生信息,每个学生占一行

    Sample Input

    1 3 5 0

    Sample Output

    akdh 13773 84 83 66
    sfhklas 61281 87 8 31
    iwehfk 92803 54 6 77
    

    HINT

    打开文件时不需要指定路径

    [Submit][Status][Web Board]

    代码

    #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    typedef struct
    {
        char name[20];
        int num;
        int english;
        int math;
        int chinese;
    }Stu;
    int main()
    {
        FILE *fp;
        Stu s[100];
        int i=0,n;
        fp=fopen("student.dic","rb");
        while(!feof(fp))
        {
            fread((void *)&s[i],sizeof(Stu),1,fp);
            ++i;
        }
        fclose(fp) ;
        while(scanf("%d",&n) && n)
        {
            n-=1;
            printf("%s %d %d %d %d\n",s[n].name,s[n].num,s[n].english,s[n].math,s[n].chinese);
        }
        
        return 0;
    }

    展开全文
  • 2924: 文件操作--二进制文件读入 时间限制:1 Sec内存限制:128 MB 提交:58解决:20 题目描述 现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件...

    2924: 文件操作--二进制文件读入

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 58  解决: 20

    题目描述

    现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占一行。

    前5行学生信息为:
    akdh 13773 84 83 66
    fjka 30257 15 14 88
    sfhklas 61281 87 8 31
    hfu 38635 55 50 60
    iwehfk 92803 54 6 77

    输入

    要输出行号的整数序列,以0作为结束标志。

    输出

    输出学生信息,每个学生占一行

    样例输入

    1 3 5 0

    样例输出

    akdh 13773 84 83 66
    sfhklas 61281 87 8 31
    iwehfk 92803 54 6 77
    

    迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

    #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include <ctime>
    #include <stdlib.h>
    using namespace std;
    struct student
    {
        char name[20];
        int num,English,Math,Chinese;
    };
    int main()
    {
        ifstream infile("student.dic",ios::in|ios::binary);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            return -1;
        }
        int n;
        student stu;
        while((cin>>n)&&n!=0)
        {
            infile.seekg((n-1)*sizeof(stu),ios::beg);
            infile.read((char *)&stu,sizeof(stu));
            cout<<stu.name<<" "<<stu.num<<" "<<stu.English<<" "<<stu.Math<<" "<<stu.Chinese<<endl;
        }
        infile.close();
        return 0;
    }
    

    转载于:https://www.cnblogs.com/im0qianqian/p/5989391.html

    展开全文
  • Problem A: 文件操作--二进制文件读入

    千次阅读 2016-06-25 12:27:21
    Problem A: 文件操作--二进制文件读入 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 589 Solved: 165 [Submit][Status][Web Board] Description 现有100名学生的姓名(name)、学号(num)、英语...

    Problem A: 文件操作--二进制文件读入

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 589  Solved: 165
    [Submit][Status][Web Board]

    Description

    现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占一行。

    前5行学生信息为:
    akdh 13773 84 83 66
    fjka 30257 15 14 88
    sfhklas 61281 87 8 31
    hfu 38635 55 50 60
    iwehfk 92803 54 6 77

    Input

    要输出行号的整数序列,以0作为结束标志。

    Output

    输出学生信息,每个学生占一行

    Sample Input

    1 3 5 0

    Sample Output

    akdh 13773 84 83 66
    sfhklas 61281 87 8 31
    iwehfk 92803 54 6 77
    

    HINT

    打开文件时不需要指定路径

    代码实现:

    #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include <ctime>
    #include <stdlib.h>
    using namespace std;
    struct student
    {
        char name[20];
        int num,English,Math,Chinese;
    };
    int main()
    {
        ifstream infile("student.dic",ios::in|ios::binary);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            return -1;
        }
        int n;
        student stu;
        while((cin>>n)&&n!=0)
        {
            infile.seekg((n-1)*sizeof(stu),ios::beg);
            infile.read((char *)&stu,sizeof(stu));
            cout<<stu.name<<" "<<stu.num<<" "<<stu.English<<" "<<stu.Math<<" "<<stu.Chinese<<endl;
        }
        infile.close();
        return 0;
    }


    展开全文
  • 现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占...
  • 现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占...
  • 这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下什么是文件文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问。能够在非易失性存储器中...
  • 目标文件的概念文件的...文件的作用将数据长期保存下来,在需要的时候使用文件的存储方式在计算机中,文件是以 二进制 的方式保存在磁盘上的文本文件和二进制文件文本文件可以使用 文本编辑软件 查看本质上还是二...
  • 现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储),现要求将指定行数的学生信息输出,每条信息占...
  • C++代码读取二进制文件,然后将其转换成不同的字节数。在python中执行同样的操作时,我遇到了问题。有人能帮我吗?在这里是C++代码:if( bByteSwap ) // make big-endian{pHdr = (UDUMPHDR *)buf;iAPID = pHdr->...
  • 2. 文件操作(实例讲解) 1)文件的打开 2)文件的关闭 3)文件内容的读取 4)文件的全文本操作 5)逐行处理文件 6)数据文件的写入 7)<f>.seek(offset)函数1. 文件是什么?1)多个角度理解文件文件是...
  • 目录:一 引入 文件操作的基本流程2.1 基本流程2.2 资源回收与with上下文管理2.3 指定操作文本文件的字符编码三 文件的操作模式3.1 控制文件读写操作的模式3.1.1 案例一:r 模式的使用3.1.2 案例:w 模式的使用...
  • 学习内容:python文件处理一、什么是文件:前边学习了计算机的存储设备... 首先双击打开(open)---调用操作系统的打开功能将文件打开然后读取(read)---这里发生了把硬盘里的内容读入内存的操作最后看完了要关闭(clo...
  • 文件是指将文件内容从磁盘读入内存,写文件是指将内存中的内容写到磁盘。网络IO: 即文件在网络上传输。网络传输一般会有两种角色,分别是服务端(如HTTP Server)和客户端(如浏览器)。本节我们主要介绍磁盘IO,即...
  • @概述 通常的文件读写要么是读入/写出字符,要么是读入/写出字节;...对文件进行二进制IO时,文件的打开方模式必须是字节读写模式; 我们习惯上将存储二进制IO数据的文件以.dat后缀命名; pickle是系统标准...
  • HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍。FileReaderFileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。...
  • 二进制文件 打开二进制文件用ios::binary方式; 二进制文件的读写方式由程序控制,...二进制文件读写操作 输入函数: Infile.read(char *,int); //char *数据进入的内存地址,int一次读入的字节数 输出函数: Outfil
  • 谭浩强C++课后习题44——对二进制文件操作(1) 题目描述:有5个学生的数据,要求: (1)把它们存到磁盘文件中。 (2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来。 (3)将第3个学生的数据修改后存...
  • HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍。FileReaderFileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。...
  • 二进制文件排序及文件二分法查询

    千次阅读 2016-08-19 15:37:43
    二进制文件排序,注意这个使用的场景:   如果文件较大,无法一次性读入到内存中,可以使用这样的排序法对文件进行排序,排序好的文件可以使用 文件二分查询法 对文件进行查询。 注意这儿的 文件二分查询法与普通...
  • 相关函数介绍在我们的C语言中读写二进制文件一般使用的fread、fwrite全局函数,当然也可以使用更底层的read和write函数。在我们的C++中 通过ofstream 和 ifstream 对象 读写文件更加的方便了。对二进制文件的读写 ...
  • C++对二进制文件操作实例

    千次阅读 2013-12-12 00:01:43
    有5个学生的数据,要求: (1)将它们存放到磁盘文件中;...(4)从磁盘文件读入修改后的5个学生的数据并在屏幕输出。 为了使自己能够看懂程序,先看说明: istream&read(char *buffer,int len); ostream&wirte(const

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 354
精华内容 141
关键字:

文件操作二进制文件读入