月下梧桐~ 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 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥20 白日门传奇少一个启动区服和启动服务器的快捷键,东西都是全的 , 他们说套一个出来就行了 但我就是弄不好,谁看看,
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题