月下梧桐~ 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 YOLOv5在进行trainpy训练后为什么会出现这种情况(语言-python)
  • ¥15 关于远程桌面的鼠标位置转换
  • ¥15 MATLAB和mosek的求解问题
  • ¥20 修改中兴光猫sn的时候提示失败
  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据
  • ¥15 为什么openeluer里面按不了python3呢?
  • ¥15 关于#matlab#的问题:训练序列与输入层维度不一样
  • ¥15 关于Ubuntu20.04.3LTS遇到的问题:在安装完CUDA驱动后,电脑会进入卡死的情况,但可以通过键盘按键进入安全重启,但重启完又会进入该情况!