替换逗号(引号中的逗号除外)

时间:2018-08-08 18:16:07

标签: python replace readfile

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列的逗号并加上引号。 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您是否考虑过将其另存为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

您可以将其作为数据框读取。

答案 1 :(得分:0)

如果您不想使用.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;'

答案 2 :(得分:0)

使用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:指示编写器对象仅引用那些字段   其中包含特殊字符,例如定界符,quotechar或任何其他字符   行尾符中的字符。

输出文件为:

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