weixin_51086573 2021-08-17 22:34 采纳率: 100%
浏览 59
已结题

py csv文件按行分解输出和 py文件整合问题

问题一:如何以等量的间隔输出多个文件 例如 第一个文件输出1-21 第二个文件输出21-42 以此类推
img
问题二:如何将下列两程序整合到一起

import os
import re
import datetime
import numpy as np
import pandas as pd

if __name__ == '__main__':
    filenames_in = r'C:\Users\wxy\Desktop\111'  # 输入文件的文件地址
    filenames_out = r'C:\Users\wxy\Desktop\333'  # 新文件的地址
    pathDir = os.listdir(filenames_in)
    for allDir in pathDir:
        child = re.findall(r"(.+?).csv", allDir)  # 正则的方式读取文件名,去扩展名
        if len(child) >= 0:  # 去掉没用的系统文件
            newfile = ''
            needdate = child  #### 这个就是所要的文件名
        domain1 = os.path.abspath(filenames_in)  # 待处理文件位置
        info = os.path.join(domain1, allDir)  # 拼接出待处理文件名字

        # ------------数据处理过程---------------
        print(info, "开始处理")
        df = pd.DataFrame(pd.read_csv(info))
        a = df.corr()
        a = round(a, 4)  # print(round(a, 4))
        b = a.applymap(lambda x: (2 * (1 - x)) ** 0.5)
        b = round(b, 4)
        # print(a)
        # print(b)
        df0 = []
        for x in a.index:
            df0.append(a.loc[x, :])
        c = pd.concat(df0, keys=a.index).to_frame().reset_index()
        c.columns = ['i', 'j', 'Corrcoef(c)']
        df1 = []
        for x in b.index:
            df1.append(b.loc[x, :])
        d = pd.concat(df1, keys=b.index).to_frame().reset_index()
        d.columns = ['i', 'j', 'Dist=sqrt(2(1-c))']
        d = d.drop(['i', 'j'], axis=1)
        df = pd.concat([c, d], axis=1, join='inner', ignore_index=False,
                       keys=None, levels=None, names=['i', 'j', 'Corrcoef(c)', 'Dist=sqrt(2(1-c))'],
                       verify_integrity=False)
        domain2 = os.path.abspath(filenames_out)  # 处理完文件保存地址
        outfo = os.path.join(domain2, allDir)  # 拼接出新文件名字
        df.to_csv(outfo, encoding='utf-8',index=False)
        print(info, "处理完")

endtime = datetime.datetime.now()




open(r'C:\Users\wxy\Desktop\re\555.csv','r',encoding='utf-8') as f, open(r'C:\Users\wxy\Desktop\re\666.csv','w',encoding='utf-8') as f1:
    a=f.readlines()
    f1.write('#'*10+'\n')
    f1.write('# i  j Corrcoef(c) Dist=sqrt(2(1-c))\n')
    f1.write('#'*10+'\n')
    for line in a:
        f1.write(' '.join(line.split(',')) + '\n')

代码二是处理代码一输出出来的文件的 如能帮助一定采纳谢谢

  • 写回答

2条回答 默认 最新

  • CSDN专家-HGJ 2021-08-17 23:29
    关注

    第一段代码直接和第二段合并,第一段去掉 if __name__语句,将open(r'C:\Users\wxy\Desktop\re\555.csv','r',encoding='utf-8')读取的文件名,对应于图一中输出的文件outfo即可。
    补充:如果读取多个csv,合并写入一个有格式要求的csv中,合并多个df,一次写入文件,可用如下代码:

    import os
    import re
    import datetime
    import numpy as np
    import pandas as pd
    
    filenames_in = r'C:\Users\1\Desktop\111'  # 输入文件的文件地址
    #filenames_out = r'C:\Users\2\Desktop\444'  # 新文件的地址
    pathDir = os.listdir(filenames_in)
    dfs=pd.DataFrame()
    for i,allDir in enumerate(pathDir):
        child = re.findall(r"(.+?).csv", allDir)  # 正则的方式读取文件名,去扩展名
        if len(child) >= 0:  # 去掉没用的系统文件
            newfile = ''
            needdate = child  #### 这个就是所要的文件名
        domain1 = os.path.abspath(filenames_in)  # 待处理文件位置
        info = os.path.join(domain1, allDir)  # 拼接出待处理文件名字
        # ------------数据处理过程---------------
        print(info, "开始处理")
        df = pd.DataFrame(pd.read_csv(info))
        dfs=dfs.append(df,ignore_index=True)
    print(dfs)
    with open(r'C:\Users\1\Desktop\666\222.csv','w', encoding='utf-8') as f1:
        f1.write('#' * 20 + '\n')
        f1.write('# i j Corrcoef(c) Dist=sqrt(2(1-c))\n')
        f1.write('#' * 20 + '\n')    
        dfs.to_csv(f1, encoding='utf-8',index=False)
    
    

    写入不同文件:

    import os
    import re
    import datetime
    import numpy as np
    import pandas as pd
    
    filenames_in = r'C:\Users\1\Desktop\111'  # 输入文件的文件地址
    #filenames_out = r'C:\Users\2\Desktop\444'  # 新文件的地址
    pathDir = os.listdir(filenames_in)
    for i,allDir in enumerate(pathDir):
        child = re.findall(r"(.+?).csv", allDir)  # 正则的方式读取文件名,去扩展名
        if len(child) >= 0:  # 去掉没用的系统文件
            newfile = ''
            needdate = child  #### 这个就是所要的文件名
        domain1 = os.path.abspath(filenames_in)  # 待处理文件位置
        info = os.path.join(domain1, allDir)  # 拼接出待处理文件名字
        # ------------数据处理过程---------------
        print(info, "开始处理")
        df = pd.DataFrame(pd.read_csv(info))
        print(df)
        
        with open(f'C:/Users/1/Desktop/666/{i}.csv','w', encoding='utf-8') as f1:
            f1.write('#' * 24 + '\n')
            f1.writelines('# i  j  Corrcoef(c)  Dist=sqrt(2(1-c))\n')
            f1.write('#' * 24 + '\n')    
            df.to_csv(f1, encoding='utf-8',index=False,header=None,line_terminator='\n')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月17日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境