我需要一些建议和建议,如何取代逗号的点和分开的数字。我解释得很好。
这是我从一个文件中得到的: 12,1899995803833,0,135000005364418,0,0582966990768909 13,0600004196167,0,141000002622604,0,098975196480751
我的问题是,首先我需要用点替换一些逗号,特别是我需要替换第一,第三,第五个逗号,并留下第二和第四个逗号。然后我需要减少有意义的数字的数量,并放置一个标签,如下所示:
12.18,0.13,0.05 13.06,0.14,0.09
正如你所看到的,这两个raw在长度上是不同的,所以我不能改变特定位置的元素。我考虑为每个原始数据创建一个单独的字符串,然后在查看平均位置后分配一个范围。例如,第一个逗号始终是第二个、第三个或第四个字符。所以我可以说,“在这个位置范围内有一个,把它改成。但其他逗号的情况并非如此,因为差异可能非常大,例如
29,3099994659424,0,521000027656555,2,40029883384705 29,75,0,531000018119812,46150183677673
(这就是我想要的: 29.30,0.52,2.40 29.75,0.53,2.46)
我想运行这个程序不止一次,所以首先我用第一个逗号替换掉第二个数字之后的所有数字,然后我对其他两列做同样的事情,但它看起来很长(我有很多txt文件)。其他方法可以是:对每个逗号执行true/false值,然后使用-assigning循环迭代列表中的所有数字,然后在1-3-5位置上获取数字,将它们称为int,在2-4-6上的数字调用dec,并使用write text函数,直接写入int,dec
我可以使用正则表达式吗?你知道我正在研究的这两种方法中更优雅的一种方法吗?另外,你能勾勒出如何设置这个程序吗?几年前,我在大学里上过一门关于Jython编程的课程,但我记不太多了。谢谢大家!
发布于 2015-11-17 01:48:37
也许有一种更优雅的方法,但我试着循环遍历“行”,然后用逗号拆分每一行,然后成对处理这些片段:
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中。
发布于 2015-11-19 02:19:43
使用标准库中的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])https://stackoverflow.com/questions/33740811
复制相似问题