python - 是否可以使用 Python csv 阅读器读取 C++ std::setw 生成的文件?

标签 python c++ csv setw

我有一个使用 C++ std::setw 生成的数据文件,例如

file << std::scientific << std::setprecision(data_precision);  

for (double data : a_data)                                                                                        
   {                                                                                                                 
       file << std::setw(data_width) << data;                                                                    
   }

file << "\n";

是否可以使用 python csv.reader 或类似工具读取数据?我已经尝试过以下方法:

with data as csvfile:
    fieldreader = csv.reader(csvfile) 
    next(fieldreader)                                                                                                                                                                    
    for row in fieldreader:                                                                  
       values.append(float(row[0]))                                                                              

输出整个第一行,表示整行存储为一个条目。我还尝试了一些不同的分隔符,例如\t 这没有帮助。

下面的示例输出:

#          z        phi               phi1          Massless 
 -16.0000000  0.0000000   9.9901854997e-01  1.0910677716e-19
 -16.0000000  0.0245437   9.9871759471e-01  1.6545142956e-05
 -16.0000000  0.0490874   9.9781493216e-01  3.3051500271e-05
 -16.0000000  0.0736311   9.9631097893e-01  4.9477653557e-05
 -16.0000000  0.0981748   9.9420658732e-01  6.5784269579e-05 

最佳答案

csvfile argumentcsv.reader 初始值设定项“可以是任何支持迭代器协议(protocol)并在每次调用其 next() 方法时返回字符串的对象”。

这意味着您可以通过定义如下所示的生成器函数来读取文件,以预处理文件的行,使它们可以被 csv.reader 接受:

import csv

def preprocess(file):
    for line in file:
        yield ','.join(line.split())

values = []
with open('cppfile.txt') as file:
    fieldreader = csv.reader(preprocess(file))
    next(fieldreader)
    for row in fieldreader:
        print(f'row={row}')
        values.append(float(row[0]))

print()
print(values)

输出:

row=['-16.0000000', '0.0000000', '9.9901854997e-01', '1.0910677716e-19']
row=['-16.0000000', '0.0245437', '9.9871759471e-01', '1.6545142956e-05']
row=['-16.0000000', '0.0490874', '9.9781493216e-01', '3.3051500271e-05']
row=['-16.0000000', '0.0736311', '9.9631097893e-01', '4.9477653557e-05']
row=['-16.0000000', '0.0981748', '9.9420658732e-01', '6.5784269579e-05']

[-16.0, -16.0, -16.0, -16.0, -16.0]

关于python - 是否可以使用 Python csv 阅读器读取 C++ std::setw 生成的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59811362/

相关文章:

c++ - 在 win32 C++ 中,如何启用静态文本控件来复制文本?

matlab - 按第一列索引对不同行中的值进行分组

python - pip freeze 捕获包名称,就好像它位于 python 索引站 pip 上一样,但事实并非如此。需要完整路径

c++ - 是否因为以下原因在堆中实例化一个对象?

python - django-tables2 用查询淹没数据库

c++ - 插入基于数组的二叉搜索树? C++

java - 用逗号拆分字符串,但忽略括号或引号中的逗号

python - 根据一个列表对Python中的五个列表进行排序

python - 对 Pandas 数据框中的每一行进行排序的最快方法

python - 如何检查 TDD 中是否存在方法?