想在文本文件中用小数点替换逗号,在python中每个数字后面都有一个逗号

wbgh16ku  于 2022-11-19  发布在  Python
关注(0)|答案(5)|浏览(163)

例如

Arun,Mishra,108,23,34,45,56,Mumbai

o\p我想要的是

Arun,Mishra,108.23,34,45,56,Mumbai

已尝试将逗号替换为点,但所有分隔符都被替换为逗号
已尝试text.replace(',','.'),但将所有逗号替换为点

x759pob2

x759pob21#

您可以使用regex执行以下类型的任务:

import re

old_str = 'Arun,Mishra,108,23,34,45,56,Mumbai'
new_str = re.sub(r'(\d+)(,)(\d+)', r'\1.\3', old_str, 1)
>>> 'Arun,Mishra,108.23,34,45,56,Mumbai'

搜索模式r'(\d+)(,)(\d+)'用于查找两个数字之间的逗号。有三个捕获组,因此可以在替换中使用它们:r\1.\3(\1和\3是第一组和第三组)。old_str是字符串,1是告诉模式只替换第一个匹配项(因此保留34、45)。

sdnqo3pr

sdnqo3pr2#

展示如何在没有额外的模块导入的情况下完成这一点可能是有益的。
其思想是在字符串中搜索所有/任何逗号。一旦确定了逗号的索引,就检查两侧的字符(检查数字)。如果观察到这样的模式,就相应地修改字符串

s = 'Arun,Mishra,108,23,34,45,56,Mumbai'

pos = 1

while (pos := s.find(',', pos, len(s)-1)) > 0:
    if s[pos-1].isdigit() and s[pos+1].isdigit():
        s = s[:pos] + '.' + s[pos+1:]
        break
    pos += 1

print(s)

输出:

Arun,Mishra,108.23,34,45,56,Mumbai
oxf4rvwz

oxf4rvwz3#

假设您有一个普通的CSV文件(如单行示例所示),我们可以假设有8列,并且您希望将第3列和第4列“合并”在一起。您可以使用正则表达式来完成此操作-如下所示。在这里,我显式地将8列匹配到8个组中-匹配 * 除逗号 * 以外的所有内容作为列值,然后再次写出8列,用逗号分隔除第3列和第4列之外的所有列,在第3列和第4列中我输入了您需要的句点/点。

$ echo "Arun,Mishra,108,23,34,45,56,Mumbai" | sed -r "s/([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)/\1,\2,\3.\4,\5,\6,\7,\8/"
Arun,Mishra,108.23,34,45,56,Mumbai

这个正则表达式是为你的确切数据。有一个通用的正则表达式来取代任何逗号之间的两个连续的数字集可能给予其他数据的错误匹配,但是,所以我认为显式匹配的数据根据确切的列你将是最安全的方式来做。
你可以把上面的正则表达式编码到你的python代码中,如下所示。

import re

inLine = 'Arun,Mishra,108,23,34,45,56,Mumbai'
outLine = re.sub(r'([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)'
    , r'\1,\2,\3.\4,\5,\6,\7,\8', inLine, 0)
print(outLine)

正如Tim Biegleisen在一个原始评论中指出的,如果你能访问原始源数据,你会更好地在那里修复格式。

wkftcu5l

wkftcu5l4#

首先使用s.split()拆分字符串,然后替换第二个元素中的',',替换后再次将字符串连接回来。

s= 'Arun,Mishra,108,23,34,45,56,Mumbai '
ls = s.split(',')
ls[2] = '.'.join([ls[2], ls[3]])
ls.pop(3)
s = ','.join(ls)
huus2vyu

huus2vyu5#

如果dot前后都有数字,则将所有逗号更改为点。

txt = "2459,12 is the best number. lets change the dots . with commas , 458,45."

commaindex = 0

while commaindex != -1:
    commaindex = txt.find(",",commaindex+1)
    if txt[commaindex-1].isnumeric() and txt[commaindex+1].isnumeric():
        txt = txt[0:commaindex] + "." + txt[commaindex+1:len(txt)+1]
        
print(txt)

相关问题