首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从txt文件中分离出用逗号替换数字?

如何从txt文件中分离出用逗号替换数字?
EN

Stack Overflow用户
提问于 2015-11-17 01:07:22
回答 2查看 198关注 0票数 0

我需要一些建议和建议,如何取代逗号的点和分开的数字。我解释得很好。

这是我从一个文件中得到的: 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编程的课程,但我记不太多了。谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2015-11-17 01:48:37

也许有一种更优雅的方法,但我试着循环遍历“行”,然后用逗号拆分每一行,然后成对处理这些片段:

代码语言:javascript
复制
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'。你可以用它做各种各样的事情。

这提供了:

代码语言:javascript
复制
    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
EN

Stack Overflow用户

发布于 2015-11-19 02:19:43

使用标准库中的re实现',‘到’‘的交替替换。在每行上。

代码语言:javascript
复制
import re
rows = [[float(num) for num in re.sub(r'(\d+),(\d+)',r'\1.\2',row).split(',')] for row in text.split()]

举个例子:

代码语言:javascript
复制
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"""

将使用列表理解生成以下内容:

代码语言:javascript
复制
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列表转换为可打印的字符串:

代码语言:javascript
复制
printable=''.join(['{0:8.2f}{1:8.2f}{2:8.2f}\n'.format(*row) for row in rows])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33740811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档