• python 常见文件读取


    1. txt 文件读取

    read 将整篇文章读成一个str
    readline方法是每次读取的是文件的一行内容,并且方法的返回值为str字符串类型

    ③ readlines方法读取的是整个文件,方法的返回值为list列表

    把文件按自己喜欢的格式读取就好

    txt按csv读取

    只需要规定按什么分割 data01 = pd.read_csv(r’event.uniq.txt’, sep=‘\t’, encoding=‘utf-8’,names=[‘1’, ‘2’, ‘3’])
    按Tab分割

    str转为字典:

    import json
    txt = ‘{‘a’:1,‘b’:5}’
    dic = json.loads(txt)

    多个列表字符串拼接

    str1= ''
    for i in str1:
        st1 += i
        print(st1)
    
    • 1
    • 2
    • 3
    • 4

    按行直接存入 csv 而不是先 append 到一个list 中

    with open(f'pre.csv', 'w', encoding='utf-8') as f, open(text, 'r', encoding='utf-8') as f_1:
        text_list = f_1.readlines()
        for idx1, sample in enumerate(y_pred):
            tags = []
            tags.append(text_list[idx1])
            for idx, p in enumerate(sample):
                if p == 1:
                    tags.append(IO2STR[idx2tag[idx]])
            f.write(",".join(tags) + '\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    f.write(line+'\n') 取消自动换行,将line全部写入之后 自己\n换行
    join 是说以什么为分隔,“,”.join(tags)是以逗号分隔
    tags 是要连接的元素序列、字符串、元组、字典

    append的使用

    会填充几个[]?
    每一次 appand 是向下填充
    ms = pd.concat([x2, x1], axis=1) # 0 是纵向将x1向下填充, 1 是横向x1横向填充

    list 拼接

    https://blog.csdn.net/Keeplingshi/article/details/72667582

    pandas 取行列

    read_csv 没办法只取其中几列

    运用python读取csv文件某几列
    iloc只能用数字索引,不能用索引名,是[]而不是()

    df.iloc[0] #第0行
    df.iloc[:,2] # 第2列
    df.iloc[0:2,0:2] #0、1行,0、1列
    df.iloc[[0,2],[1,2,3]] #第0、2行,1、2、3列
    
    • 1
    • 2
    • 3
    • 4

    loc只能通过index(行)和columns(列)索引名来取,不能用数字索引,一般的loc的行取可用数字索引,但列名不可用数字索引

    df.loc[‘one’,‘a’]#one行,a列
    df.loc[‘one’:‘two’,‘a’]#one到two行,a列
    df.loc[‘one’:‘two’,‘a’:‘c’]#one到two行,a到c列
    df.loc[‘one’:‘two’,[‘a’,‘c’]]#one到two行,ac列
    
    • 1
    • 2
    • 3
    • 4

    按某列元素删除 dataframe 一行或列

    import numpy as np
    import pandas as pd
    arr=np.ones([2,3])
    df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
    dfr=df.drop('第一列',axis=1)  #删除'第一列'这列,axis=1表示是列
    '''但要注意,默认情况下,drop命令是返回一个删除了'第一列'之后的DataFrame,
    并不是在df里把'第一列'删了'''
    print(dfr)
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看某列各元素出现的次数

    print(df4[“英语”].value_counts()) # 查看英语列各元素出现的次数

    添加列名

    df4.columns = [1, 2] # 添加列名

    按列排序

    方法一
    df.sort_values([“column_name1”, “column_name2”] , inplace=True, ascending=True)

    方法二:(必须有列名)
    df4.columns = [1, 2] # 添加列名
    df4.sort_values(by=2, inplace=True, ascending=True)

    pandas 多维数组去重

    df12 = df.drop_duplicates(subset=0, keep=‘first’, inplace=False)
    在这里插入图片描述

    pandas替换

    df.apply(lambda x:x.replace(‘nan%’,‘0.00%’))

    pandas read_csv

    不可以设置头和列的名字方便后面读取?
    有一些按','分割不好的可以读取时候跳过 error_bad_lines=False
    index 是列序号 header是头序号

    dataframe打印不省略

    import pandas as pd
    
    # 行不限制
    pd.set_option('display.max_rows', None)
    
    # 列不限
    pd.set_option('expand_frame_repr', False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    根据位置设置 loc 和 iloc

    我们可以利用索引或者标签确定需要修改值的位置。

    df.iloc[2,2] = 1111
    df.loc['20130101','B'] = 2222
     
    """
                 A     B     C   D
    2013-01-01   0  2222     2   3
    2013-01-02   4     5     6   7
    2013-01-03   8     9  1111  11
    2013-01-04  12    13    14  15
    2013-01-05  16    17    18  19
    2013-01-06  20    21    22  23
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    按行或列设置

    df['F'] = np.nan
    """
                 A     B     C   D   F
    2013-01-01   0  2222     2   3 NaN
    2013-01-02   4     5     6   7 NaN
    2013-01-03   8     0  1111  11 NaN
    2013-01-04  12     0    14  15 NaN
    2013-01-05  16     0    18  19 NaN
    2013-01-06  20     0    22  23 NaN
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    根据条件设置

    如果现在的判断条件是这样, 我们想要更改B中的数, 而更改的位置是取决于 A 的. 对于A大于4的位置. 更改B在相应位置上的数为0.

    df.B[df.A>4] = 0
    """
                    A     B     C   D
    2013-01-01   0  2222     2   3
    2013-01-02   4     5     6   7
    2013-01-03   8     0  1111  11
    2013-01-04  12     0    14  15
    2013-01-05  16     0    18  19
    2013-01-06  20     0    22  23 
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    正则内容

    https://www.jb51.net/article/238575.htm
    删除某个字符前的内容

    s = "21-2"
    # 方法一(通用)
    # 找到‘-’的索引值,然后加一取出减号后面的值
    index = s.find('-')+1
    print(s[index:])
    # 方法二(手工计算便宜)
    # 数偏移量
    print(s[3:])
    # 方法三(取巧,利用-分隔)
    # 已‘-’为分隔符,取后面的内容
    print(s.split('-')[1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # text是带有转义字符的字符串
    new_str= ''.join(str(text).split())
    
    • 1
    • 2

    %s 字符串 (采用str()的显示)
    %d 十进制整数

    write 不换行方法

    f.write('%s,%s\n' %(text_list[idx1], (",".join(tags))))
    
    • 1

    f.write(line+‘\n’)
    写入的文件默认在一行显示。每次完成写入后,自动换行到下一行,下次写入时便会在下一行写入。

    json

    json.dumps()函数解析

  • 相关阅读:
    黄金投资面对K线图有哪些好用的交易策略?
    代码大佬的【Linux内核开发笔记】分享,前人栽树后人乘凉!
    文件对比工具Beyond Compare 4(4.4.7) for Mac
    代码随想录算法训练营20期|第五十七天|动态规划part15|● 392.判断子序列 ● 115.不同的子序列
    水力和水文软件介绍
    机器学习:塑造未来的核心力量
    Java项目:毕业设计管理系统(java+SSM+JSP+jQuery+mysql)
    spring 三级缓存 循环依赖
    Flutter调用以太坊区块链智能合约 (私链)
    云原生Kubernetes:K8S集群kubectl命令汇总
  • 原文地址:https://blog.csdn.net/weixin_42802447/article/details/126009690