月下梧桐~ 2022-02-17 22:22 采纳率: 81.8%
浏览 61
已结题

如何用Python导出特定格式的CSV文件

一、问题描述
本人Python初学者。想用python读取csv文件,然后修改数据再按原格式导出,主要问题是如何按原格式导出?文件格式如下:

     numlog:50   Form  837.000   to 837.350   rlev:0.050
 AAA          BBB        CCC        DDD       
 837.000    837.0000   413.0964    21.8307    
 837.050    837.0500   414.1302    21.8374    
 837.100    837.1000   414.1225    21.8441    
 837.150    837.1500   414.3120    21.8510    
 837.200    837.2000   414.7883    21.8508    
 837.250    837.2500   415.3184    21.8507    
 837.300    837.3000   415.4753    21.8506    
 837.350    837.3500   415.7533    21.8471    

文件扩展名是dat,行间回车分隔,行内空格分隔,数据间空格数量不固定,比对后发现有个规律,就是每个数据分配11个字符,起始字符是一个空格,然后接数据,再后面接空格直至满11个字符。现在的问题是不知道如何才能生成这种格式的文件

二、问题相关代码


import pandas as pd

path1= 'D:\CS.dat'                                                 #导入路径
path2= 'D:\CS_X.dat'                                               #导出路径
df=pd.read_csv(path1, sep='\s+',header=1)                #header-表头
idx=df.query('CCC>=414 & DDD>=21.84').index              #获取满足条件的索引
df.loc[idx,'DDD']=20.0000                                #按索引给符合条件的行中相应字段赋值
print(df[['BBB','CCC']])                                 #取多列时需要两层[]
df.to_csv(path2,index=0,sep=',',float_format='%11.4f')   #将修改后的文件导出

三、需要达到的预期
基本需求是:导出和原文件格式相同的CSV文件。
具体有几个需要解决的细节:
①sep参数怎么写,上面代码中暂时使用逗号分隔符;
②如何实现数据前留出一个空格,数据后空格补齐,直到达到11个字符
③作为基本信息描述的第一行,如何按原文件格式加入到导出的文件中

  • 写回答

2条回答 默认 最新

  • 关注

    用字符串拼接吧
    你题目的解答代码如下:

    import pandas as pd
    
    path1= 'D:\CS.dat'                                                 #导入路径
    path2= 'D:\CS_X.dat'                                               #导出路径
    df=pd.read_csv(path1, sep='\s+',header=1)                #header-表头
    idx=df.query('CCC>=414 & DDD>=21.84').index              #获取满足条件的索引
    df.loc[idx,'DDD']=20.0000                                #按索引给符合条件的行中相应字段赋值
    print(df[['BBB','CCC']])                                 #取多列时需要两层[]
    print(df)
    
    with open(path1, 'r') as fileObj:
        st = fileObj.readline()
    columns = df.columns.values.tolist()
    for k in columns:
        st += f" {k:<10}"
    st += "\n"
    for idx, row in df.iterrows():
        for k in columns:
            st += f" {row[k]:<10.4f}"
        st += "\n"
    print(st)
    with open(path2, 'w') as fileObj:
        fileObj.write(st)
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥15 小红薯封设备能解决的来
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'
  • ¥15 vue+element项目中多tag时,切换Tab时iframe套第三方html页面需要实现不刷新
  • ¥50 深度强化学习解决能源调度问题
  • ¥15 一道计算机组成原理问题