如何在Python中将一个ASCII文件的一列分开并添加到另一个ASCII文件的最后一列?

2024-09-30 06:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想分离一个ASCII文件的最后一列,并将其添加到另一个ASCII文件的末尾。到目前为止,我做了下面的代码,我期待它能工作。如果有人能帮助我找出错误所在,我将不胜感激。在

import os,sys,csv

filename = 'E:\AirborneLidarData\IntensFirst\325115401.asc'
outfilename = 'E:\AirborneLidarData\LaserFirst\325115401.asc'

csv_out = csv.writer(open(outfilename, 'w'), delimiter=' ')

f = open(filename,'r')
for line in f:
   vals = line.split('\t')
   for item in csv_out:
      csv_out.writerow(item.strip() , vals[3])

下面是两个数据集的5行示例。在

填充:

^{pr2}$

输出文件:

32511999.00 5401190.00  313.98  
32511999.50 5401190.00  313.98  
32511998.50 5401190.50  314.10  
32511999.00 5401190.50  314.04  
32511999.50 5401190.50  313.99  

Tags: 文件csvinforlineasciiopenfilename
1条回答
网友
1楼 · 发布于 2024-09-30 06:33:40

您需要首先遍历两个输入文件,合并行,然后写入一个临时文件。然后将临时文件移回预期的输出文件。实际上并没有CSV数据,而是使用任意数量的空格作为分隔符的数据。您需要手动处理,但我们将使用csv模块写出:

import csv
import tempfile
import shutil
from itertools import izip

with open(filename, 'rb') as infile1, open(outfilename, 'r+b') as infile2:
    outfile = tempfile.TemporaryFile()
    outcsv = csv.writer(outfile, delimiter=' ')

    for line1, line2 in izip(infile1, infile2):
        row1, row2 = line1.split(), line2.split()
        outcsv.writerow(row2 + [row1[2]])

    # rewind files to start; alternative is to close both and use `shutil.copyfile()`
    outfile.seek(0)
    infile2.seek(0)
    shutil.copyfileobj(outfile, infile2)
    outfile.close()

上面的代码打开outfilename进行读写(模式r+b),以方便临时文件内容的复制。我假设filenameoutfilename具有相同的行数;如果它们没有,则任何文件中的额外行都将被忽略。您可以使用itertools.izip_longest(),但是您必须想出一个策略来决定在这种情况下要为丢失的行填充什么。在

您还需要避免在文件名中使用\123转义序列。使用正斜杠、原始字符串或双反斜杠:

^{pr2}$

或者

filename = r'E:\AirborneLidarData\IntensFirst\325115401.asc'
outfilename = r'E:\AirborneLidarData\LaserFirst\325115401.asc'

或者

^{4}$

将所有的工作,因为它们避免反斜杠被解释为转义序列。在

相关问题 更多 >

    热门问题