【问题标题】:Replace commas except those in quotation marks替换逗号,引号中的逗号除外
【发布时间】:2019-05-04 04:14:53
【问题描述】:
Date,Time,Ref,Sen,ATN,Flow,PCB temp,Status,Battery,BC
2015/04/23,12:30:00,779581,908043,"-15,254",49,31,0,100,
2015/04/23,12:35:00,778715,907084,"-15,259",49,31,0,100,-127
2015/04/23,12:40:00,778299,906419,"-15,239",49,32,0,100,461
(...)

您好,我有一个类似上面的 ascii 文件,我正在尝试将逗号替换为分号。这是我正在使用的代码:

filein = open('Prueba1.txt')
fileout = open('Fin.txt', 'wt')
for line in filein:
    if line.startswith('20'):
        fileout.write( line.replace(',', ';') )
filein.close()
fileout.close()

问题是现在我想保留第 5 列的逗号,并且还要加上引号。 有什么想法吗?

【问题讨论】:

    标签: python replace readfile


    【解决方案1】:

    您是否考虑过将其保存为 csv 文件。

    将其保存为 csv 文件后:

    import pandas as pd
    v = pd.read_csv("check_delete.csv")
    

    输出:

          Date            Time  Ref     Sen      ATN      Flow  PCB temp    Status  Battery BC
    0   2015/04/23  12:30:00    779581  908043  -15,254 49  31  0   100   NaN
    1   2015/04/23  12:35:00    778715  907084  -15,259 49  31  0   100   -127.0
    2   2015/04/23  12:40:00    778299  906419  -15,239 49  32  0   100    461.0
    

    您可以将其视为数据框。

    【讨论】:

    • v.to_csv('new.csv',sep=';',index=False) 会将其保存为一个新的 csv 文件,并以 ; 作为分隔符。
    • 非常感谢。这个熊猫图书馆太棒了!
    【解决方案2】:

    如果您不想使用 .csv 文件,这是使用 split() 方法的答案。

    让我们认为这条线是:

    line = '2015/04/23,12:35:00,778715,907084,"-15,259",49,31,0,100,-127'

    首先,将线条分成三部分。引号中的部分之前的部分,引用的部分和引号中的部分之后的部分。 这可以通过line.split('"') 完成。

    这将给我们一个由这三个部分组成的列表:

    alist = ['2015/04/23,12:35:00,778715,907084,', '-15,259', ',49,31,0,100,-127']

    现在,用逗号分隔列表的第一个和最后一个元素。 并将所有元素添加到一个空字符串中。 将此字符串写入新文件。

    像这样:

    left_part = alist[0].split(',')
    right_part = alist[2].split(',')
    middle_part = alist[1]
    final_list = left_part + [middle_part] + right_part
    new_line = ''
    for part in final_list:
        # to prevent the empty strings to be added add the if condition.
        if part:
            new_line += part + ';' 
    

    最终的结果应该是这样的:

    '2015/04/23;12:35:00;778715;907084;-15,259;49;31;0;100;-127;'

    【讨论】:

      【解决方案3】:

      使用csv Python 标准库的解决方案:

      import csv
      
      with open('example.csv', newline='') as inputfile, \
           open('parsedcsv.csv', 'w',  newline='') as outpufile:
      
          datareader = csv.reader(inputfile, delimiter=',', quotechar='"')
      
          csvwriter = csv.writer(outpufile, delimiter=';',
                  quotechar="'", quoting=csv.QUOTE_MINIMAL)
      
          csvwriter.writerows(datareader)
      

      引用文档中有关 QUOTE_MINIMAL 选项的内容:

      csv.QUOTE_MINIMAL:指示 writer 对象仅引用这些字段 其中包含特殊字符,例如分隔符、引号字符或任何 lineterminator 中的字符数。

      输出文件是:

      Date;Time;Ref;Sen;ATN;Flow;PCB temp;Status;Battery;BC
      2015/04/23;12:30:00;779581;908043;-15,254;49;31;0;130;
      2015/04/23;12:35:00;778715;907084;-15,259;49;31;0;100;-127
      2015/04/23;12:40:00;778299;906419;-15,239;49;32;0;100;461
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多