我需要一些关于如何用点和单独的数字替换逗号的建议和建议。我解释得很好。
这是我从文件中得到的: 12,1899995803833,0,135000005364418,0,0582966990768909 13,0600004196167,0,141000002622604,0,098975196480751
我的问题是首先我需要用点替换一些逗号,特别是我需要替换第一个,第三个,第五个逗号并留下第二个和第四个逗号。然后我需要减少有意义数字的数量并放置一个标签,如下所示:
12.18,0.13,0.05 13.06,0.14,0.09
正如您所看到的那样,两个原始数据的长度不同,因此我无法在特定位置更改元素。 我想为每个原始创建一个单独的字符串,然后在查看平均位置后指定一个范围。 例如,第一个逗号始终是第2个,第3个或第4个字符。所以我可以说“ïf在这个位置范围内有一个,改变它。” 但这不是其他逗号的情况,因为差异可能非常大,例如
29,3099994659424,0,521000027656555,2,40029883384705 29,75,0,531000018119812,2,46150183677673
(这就是我想要的: 29.30,0.52,2.40 29.75,0.53,2.46)
我想要运行该程序超过1次,所以首先我替换第一个逗号并删除第二个数字后面的所有数字,然后我对其他2个列做同样但看起来很长(我有很多) txt文件)。 其他方式可能是: - 为每个逗号分配一个真/假值,然后循环播放一个循环 - 将列表中的所有数字分开,然后在1-3-5位置调用它们调用int,2-4-6调用它们dec并使用write text函数,直接写入int,dec
我可以使用正则表达式吗?你知道我正在研究的两个更优雅的方式吗? 另外,你能描绘一下如何设置程序吗?几年前我在大学做过关于Jython编程的课程,但我记不太清楚了。 谢谢大家!
答案 0 :(得分:1)
也许有一种更优雅的方式,但我尝试在'行'上循环,然后在逗号上分割每一行,然后成对处理这些片段:
text = """12,1899995803833,0,135000005364418,0,0582966990768909
13,0600004196167,0,141000002622604,0,098975196480751
29,3099994659424,0,521000027656555,2,40029883384705
29,75,0,531000018119812,2,46150183677673"""
# First make the floats as a list of lists.
out = []
for row in text.split():
items = row.split(',')
ints, decs = items[::2], items[1::2]
outrow = []
for i, d in zip(ints, decs):
outrow.append(float('{0}.{1}'.format(i, d)))
out.append(outrow)
# Now we have a list of lists. Format them as text.
result = '{0:>8s}{1:>8s}{2:>8s}\n'.format('A', 'B', 'C')
for row in out:
result += '{0:8.2f}{1:8.2f}{2:8.2f}\n'.format(*row)
print(result)
在Python str.format()
中使用the formatting 'minilanguage'。你可以用它做各种各样的事情。
这给出了:
A B C
12.19 0.14 0.06
13.06 0.14 0.10
29.31 0.52 2.40
29.75 0.53 2.46
您也可以直接使用out
作为浮点数组,例如在NumPy。
答案 1 :(得分:0)
使用标准库中的re
来实现交替替换','到'。'在每一行。
import re
rows = [[float(num) for num in re.sub(r'(\d+),(\d+)',r'\1.\2',row).split(',')] for row in text.split()]
例如:
text = """12,1899995803833,0,135000005364418,0,0582966990768909
13,0600004196167,0,141000002622604,0,098975196480751
29,3099994659424,0,521000027656555,2,40029883384705
29,75,0,531000018119812,2,46150183677673"""
将使用列表解析生成以下内容:
rows
>>>[[12.1899995803833, 0.135000005364418, 0.0582966990768909],
[13.0600004196167, 0.141000002622604, 0.098975196480751],
[29.3099994659424, 0.521000027656555, 2.40029883384705],
[29.75, 0.531000018119812, 2.46150183677673]]
除了@kwinkunks提供的格式之外,我没有进一步添加格式。基于他的回答,您可以通过执行以下操作将rows
列表列表转换为可打印的字符串:
printable=''.join(['{0:8.2f}{1:8.2f}{2:8.2f}\n'.format(*row) for row in rows])