zoukankan      html  css  js  c++  java
  • 人丑就要多读书、三元运算、文件处理

                                                人丑就要多读书

    • 读书可以改变一个的气质,变得有内涵

    • 可以去豆瓣网上看一些书评、影评

    • 读书推荐:《追风筝的人》、《白鹿原》

    • 电影推荐:《阿甘正传》、《辛德勒的名单》

    • 任何有收益的事情,都不是“短平快”获取来的,“慢”是一种生活姿态

    • 套用钱钟书夫人杨绛的一句话,我们大多数人的窘境都是:想法太多,读书太少

    • 我们的人生Level一定程度上可以由读书来决定

    • 改变人生的几种方式:读书、看电影、去旅行、经历一些“别样的”事情

    • 我们大多数人都不会觉得自己LOW,百分之八十的人都会觉得自己还“凑合”

                                                        三元运算

    1 a = 2
    2 b = 5
    3 val = a if a < b else b
    4 print(val)        # 2
    5 val = a if 6 < 3 else b
    6 print(val)        # 5

                                                   文件处理(读、写、修改)

    • 日常操作文件方式:

    • 文件处理—读文件

     1 #读文件
     2 file = open(file='兼职白领学生空姐模特护士的联系方式.txt',mode='r',encoding='utf-8')
     3 file_data = file.read()
     4 print(file_data)
     5 file.close()
     

    7 file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt' 表示文件路径 8 mode='r' 表示只读(可以修改为其他) 9 encoding='utf-8' 表示将硬盘上的 0101010 按照utf-8的规则去“断句”,再将“断句”后的每一段0101010转换成unicode的 01010101,unicode对照表中有01010101和字符的对应关系。 10 f.read() 表示读取所有内容,内容是已经转换完毕的字符串。 11 f.close() 表示关闭文件

    13 #此处的encoding必须和文件在保存时设置的编码一致,不然“断句”会不准确从而造成乱码
    • 文件处理—二进制模式

         在不知道文件编码格式的场景下使用:

    1 file = open(file='兼职白领学生空姐模特护士的联系方式.txt',mode='rb')          #binary  以二进制的形式打开文件,用于网络传输,给机器看
    2 file_data = file.read()    #阅读文件内容
    3 print(file_data)             #打印文件内容
    4 file.close()                    #一定要关闭文件
    • 文件处理—智能检测编码的工具

             1、chardet工具

    1 import chardet
    2 f = open(file='兼职白领学生空姐模特护士的联系方式.txt',mode='rb')
    3 data = f.read()
    4 print(data)
    5 f.close()
    6 print(chardet.detect(data))            #{'encoding': 'GB2312', 'confidence': 0.823045267489712, 'language': 'Chinese'}     #0.823045267489712表示相似程度
    
    

          2、chardet工具的pip安装

    • 文件处理-写模式操作文件

              1、循环文件(每次只读取一部分,可以不占用全部内存去读取文件内容)

     

         为什么每行之间是有空行的呢?

         print语句本身会换行,文件中本身又隐藏着 换行符,所以呈现的效果是换了两行。

     

            2、写文件操作

    1 f = open(file='兼职.txt',mode='w',encoding='utf-8')
    2 f.write('路飞学城')
    3 f.close()
    4 
    5 
    6 mode='w'                                             表示只写
    7 encoding='utf-8'                                     将要写入的unicode字符串编码成utf-8格式
    8 f.write(...)                                         表示写入内容,写入的内容是unicode字符串类型,内部会根据encoding转换为制定编码的 01101010101,即:字节类型
    9 f.close()

    1 #二进制写
    2 f = open(file='兼职2.txt',mode='wb')
    3 f.write('路飞学城'.encode('gbk'))
    4 f.close()
    1 #清空旧文件,之后重新写入
    2 f = open(file='兼职.txt',mode='wb')
    3 f.write('原子二号'.encode('gbk'))
    4 f.close()

                3、小结                

                 注意write模式操作文件,永远都不是修改,而是创建新文件。

                 如果原来文件与新文件名称相同,就是清空文件内容,再重新写入新内容,所以使用write时候,一定要慎重。

                 文件操作时,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。

                 写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

                             wb,写入时需要直接传入以某种编码的0100101,即:字节类型。

                             w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010。

    • 文件处理-追加模式操作文件

    1 #把内容追加到文件尾部
    2 file = open(file='兼职白领学生空姐模特护士的联系方式.txt',mode='ab')      #b  二进制模式追加
    3 file.write('
    杠娘 北京 167 55 135585834333'.encode('gbk'))
    4 file.close()            #如果不是使用with方法,记得一定要关闭文件

     

                                          文件处理-混合操作文件

    • r+读写模式

    1 file = open('兼职白领学生空姐模特护士的联系方式.txt','r+',encoding='gbk')#读写模式操作文件;
    2 data = file.read()          #全读
    3 print("content",data)     #打印
    4 file.write("
    newline 1哈哈")     #写入
    5 file.write("
    newline 2哈哈")
    6 file.write("
    newline 3哈哈")
    7 file.write("
    newline 4哈哈")
    8 print("
    new content",file.read())
    9 file.close()

      注意: 先读取再写入,然后再次去读取,内容在写入之后读取,所以未打印出来,但文件中已经写入新的内容了。

    • w+写读模式

     注意:w+会先把文件清空,再写新内容,相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容,所以并不常用。

                                           文件操作其他功能

    • file.flush()方法(手工将buffer刷入硬盘中

    f = open('f_flush_test.txt','w',encoding='gbk')
    f.write('
    test')
    f.write('
    test2')
    f.flush()

    • 在Linux系统中判断文件是否可读,返回值为布尔值,buffer中的内容不可读取。

    file = open(file='file_flush_test.txt',mode='w',encoding='gbk')
    file.write('
    测试1')
    file.write('
    测试2')
    file.flush()
    file.readable()               #true

    • file.readline()每次只读一行

    #每次只读一行
    file = open('f_flush_test.txt',mode='r',encoding='gbk')
    file.readline()

    • seek    把操作文件的光标移到指定位置; tell    返回当前文件操作光标位置;

    seek方法找到的真的是字符吗?

    小结:

    1、tell与seek方法是按照字节来读取内容的,而read是按照字符来读取

    2、gbk占2个字节,utf-8占用3个字节

    • truncate   按照制定长度截断文件

          

     

                                                     文件处理-文件修改功能

    • 替换模式修改文件

    f = open("兼职白领学生空姐模特护士联系方式utf8.txt",'r+',encoding="utf-8")
    f.seek(6)
    f.write("[路飞学城]")
    f.close()
    王心[路飞学城]9    46    13813234424
    马纤羽     深圳    173    50    13744234523
    乔亦菲     广州    172    52    15823423525
    罗梦竹     北京    175    49    18623423421
    刘诺涵     北京    170    48    18623423765
    岳妮妮     深圳    177    54    18835324553
    贺婉萱     深圳    174    52    18933434452
    叶梓萱    上海    171    49    18042432324
    杜姗姗 北京  167 49 13324523342
    black girl  河北  167 50  13542342233

    确实是从第3个字开始改的,但是[路飞学城] 把后面的内容覆盖了。为什么这样的呢?

          这是硬盘的存储原理导致的。当你把文件存到硬盘上,就在硬盘上划了一块空间存数据,等你下次打开这个文件时 ,seek到一个位置,每改一个字就是把原来的覆盖掉,如果要插入是不可能的,因为后面的数据在硬盘上不会整体向后移。所以就出现这种情况 ,你想插入却会把旧内容覆盖掉。

    • 占硬盘方式修改文件

     1 import os
     2 file_name = "兼职白领学生空姐模特护士的联系方式.txt"
     3 file_new_name = "%s.new"%file_name
     4 old_str = "乔亦菲"
     5 new_str = "杠娘"
     6 file = open(file = file_name,mode='r',encoding='utf-8')
     7 file_new = open(file = file_new_name,mode='w',encoding='utf-8')
     8 
     9 for line in file:
    10     if old_str in line:
    11         line = line.replace(old_str,new_str)
    12     file_new.write(line)
    13 file.close()
    14 file_new.close()
    15 os.rename(file_new_name,'123.txt')
    王心颜 [路飞学城]luffycity424
    马纤羽    深圳 173    50 13744234523
    乔亦菲    广州 172    52 15823423525
    罗梦竹    北京 175    49 18623423421
    刘诺涵    北京 170    48 18623423765
    岳妮妮    深圳 177    54 18835324553
    贺婉萱    深圳 174    52 18933434452
    叶梓萱    上海 171    49 18042432324
    杜姗姗 北京  167 49 13324523342
    black girl  河北  167 50  13542342233

     

  • 相关阅读:
    差分约束系统详解
    AC自动机详解
    KMP算法详解
    ST算法详解
    Trie详解
    欧拉路径详解
    树上差分详解
    LCA详解
    树链剖分详解
    树的直径详解
  • 原文地址:https://www.cnblogs.com/wqq0723/p/9554394.html
Copyright © 2011-2022 走看看