【问题标题】:Python: parse .exp to .csvPython:将 .exp 解析为 .csv
【发布时间】:2015-06-24 17:45:53
【问题描述】:

我正在浏览.exp 文件的目录,从每个文件中提取我想要的信息,然后将其编译成.csv 文件。它不优雅,但它是:

    outMCfile = open(os.path.join(workingDir,'output',date+'NeptuneCdSummary.csv'),'w+')
for fn in fileList:
    infile = os.path.join(workingDir,fn)

    tmpHeader = open(infile,'r').readlines()
    for line in tmpHeader:
        line = line.strip()
        if line.startswith('Date') == True:
            doa = line.split(' ')
            doa = doa[1]
            outMCfile.write(doa)
            outMCfile.write("\n")
        elif line.startswith('Run number') == True:
            run = line.split(':')
            run = run[1].strip()
            outMCfile.write(run)
            outMCfile.write("\n")
        elif line.startswith('Comment') == True:
            comment = line.split(':')
            comment = comment[1].strip()
            outMCfile.write(comment)
            outMCfile.write("\n")
        elif line.startswith('SampleType') == True:
            samType = line.split(':')
            samType = samType[1].strip()
            outMCfile.write(samType)
            outMCfile.write("\n")
        elif line.startswith('Cycle') == True:
            labels = line
            outMCfile.write(labels)
            outMCfile.write("\n")
        elif line.startswith('***') == True:
            summary = line
            outMCfile.write(summary)
            outMCfile.write("\n")

outMCfile.close()

for 循环中的最后两个条件(以“Cycle”和“***”开头的行)为 22-32 列宽(有些是索引,有些是浮点数)。如何界定结果?对于同一单元格中的每一行,我只在输出 CSV 中得到一长串数字。如果我使用line.split(),无论我在括号中使用哪个分隔符,我都会得到TypeError

.exp 中的源代码行(全部在一行上)如下所示: “***平均数1.8101587019969535e-003 1.7032095329860594e-003 1.1496630243258965e-003 1.1713999855908471e-003 4.7688994577955489e-003 4.5573296301687650e-003 3.9930890896827012e-002 2.0829073529889563e-002 9.3939542591824787e-001 9.5234032647735734e-001 1.7299477345544945e + 000 2.5226638938456563 E + 000 3.8076954346734854e-001 1.8291027001438267e + 000 2.6616393017410958e + 000 4.0608176179586236e-001 1.5082949448806580e + 000 2.1780140681716909e-001 1.4703089782231224e-001"

但.csv中的输出不再有空格分隔;它都在第一个单元格中,而我希望每个单元格都有自己的单元格。

【问题讨论】:

  • == True 是多余的。也许发布那些引起麻烦的行之一?
  • 另一个挑剔:outMCfile = open(...)'w' 模式就足够了,因为你从来没有读过它。
  • 感谢您的提示。 == True...我在 Python 中仍然处于笨拙的水平,一直在寻找更精简的技巧。这就是导致问题的原因,特别是:elif line.startswith('Cycle') == True: labels = line outMCfile.write(labels) outMCfile.write("\n") elif line.startswith('***') == True: summary = line outMCfile.write(summary) outMCfile.write("\n")
  • 您能否举例说明感兴趣的案例的线条?
  • 您尝试过 newline = summary.split() 并使用换行符吗?

标签: python python-2.7 csv


【解决方案1】:

现在很明显,在之前的所有 elif 中,您从列表中写入一个值,而在最后两个中,您尝试将整个列表写入文件。您只能将字符串写入文件。再次将其转换为字符串:

outMCfile.write(','.join(line.split()))

或者更简单:

 outMCfile.write(line.replace(' ', ','))

假设逗号是您的 csv 分隔符

【讨论】:

  • 啊,哇,现在看起来确实很明显......我再也不会这样做了!非常感谢大家。它现在就像一个魅力。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2021-07-04
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多