python - 读取带有负数的文本文件时出现问题
问题描述
文本文件: 我有一个包含超过 87,000 个数据点的文本文件。文本文件的格式如下:
- X坐标----- Y坐标------参数1 ------参数2--------
- 2.744596610E-02 1.247197202E+00 7.121462841E-03 2.467938066E-05
- 2.732558411E-02 1.242196291E+00 1.365028508E-02 6.262368697E-05
- 2.713870635E-02 1.227254209E+00 1.958976965E-03-3.179617352E-06
由于前导-(减号)符号,以粗体突出显示的两个数字之间没有空格,因此生成的 csv/pandas 数据帧会导致如下所示。
输出:
| X Coordinate | Y Coordinate | Parameter 1 | Parameter 2 |
| -------------- | -------------- | --------------- | ------------ |
| 2.744596610E-02 | 1.247197202E+00 | 7.121462841E-03 | 2.467938066E-05 |
| 2.732558411E-02 | 1.242196291E+00 | 1.365028508E-02 | 6.262368697E-05 |
| 2.713870635E-02 | 1.227254209E+00 | 1.958976965E-03-3.179617352E-06| |
必需的:
| X Coordinate | Y Coordinate | Parameter 1 | Parameter 2 |
| -------------- | -------------- | --------------- | ------------ |
| 2.744596610E-02 | 1.247197202E+00 | 7.121462841E-03 | 2.467938066E-05 |
| 2.732558411E-02 | 1.242196291E+00 | 1.365028508E-02 | 6.262368697E-05 |
| 2.713870635E-02 | 1.227254209E+00 | 1.958976965E-03 |-3.179617352E-06 |
我对 python/pandas 很满意,所以任何编程技术都会有很大帮助。
解决方案
正则表达式可以在其中放置空格:
import re
with open("current.txt") as fh, open("new.txt", "w") as gh:
# skip the first line
fh.readline()
# for other lines..
for line in fh:
gh.write(re.sub(r"(E[+-]\d+)(\S)(\d|\.)", r"\1 -\3", line))
然后
# you can include the header, I didn't paste
df = pd.read_csv("new.txt", sep=" ", header=None)
给我
>>> df
0 1 2 3
0 0.027446 1.247197 0.007121 0.000025
1 0.027326 1.242196 -0.013650 0.000063
2 0.027139 -1.227254 0.001959 -0.000003
推荐阅读
- c -
C 代码中关于 malloc/free 的致命错误 - c++ - 使用具有私有成员的对象调用模板化成员函数
- javascript - JavaScript:未捕获的 SyntaxError:无效或意外的令牌 nodejs
- c# - 如何在 Angular 11 中使用 CryptoJS 来获得相同的解密字符串,如 C# Rfc2898DeriveBytes
- woocommerce - 如何在 WooCommerce 中禁用特殊日期
- javascript - 更新打字稿角度中单独行中的位置表字段以导出pdf
- javascript - 渲染器进程中未定义电子需求
- javascript - 优先 CSS 表
- python - 用于创建字典的函数中的默认参数会创建一个无限循环的自引用
- algorithm - 动态编程将任务分配给不同的计算机