繁体   English   中英

如何在Python中编辑* .txt或* .dat文件信息?

[英]How to edit the *.txt or *.dat file information in Python?

我是Python的初学者,并且遇到了下一个“问题”。 如果您能帮助我,我会很高兴)

我有一个* .dat文件(我们将其命名为file-1 ,第一行只是一个标题,仅在此处用于标记列),如下所示:

1   2   3       4   5   6

6   5   -1000   ""  ""  ""
6   5   -1000   ""  ""  ""

6   5   -1000   ""  ""  ""

6   5   -1000   ""  ""  ""
6   5   -1000   ""  ""  ""
6   5   -1000   ""  ""  ""
6   5   -1000   ""  ""  ""

我需要它像( file-1(converted) ):

6   5   1   -1000
6   5   1   -1000
6   5   2   -1000
6   5   3   -1000
6   5   3   -1000
6   5   3   -1000
6   5   3   -1000

因此,文件1有9行(7条信息,2空)和6列,我必须做下一行:

  1. 删除文件1中的最后3列。
  2. 在第2列和第3列之间添加1个新列。
  3. 在通过空行后,此新列的值应增加1个单位(如“ + = 1”)。
  4. 删除所有空行。 结果表示为“文件1(已转换)”。

我已经尝试过但卡住了。 目前,我处于:

import sys
import csv

with open("file-1.dat", "r", newline="") as f:
    sys.stdout = open('%s2 (converted).txt' % f.name, 'a')
    incsv = csv.reader(f, delimiter="\t")
    for row in incsv:
        if len(row) == 6:
            i = 0
            row = row[0:3]
            row.insert(2, i)
            print(row)

它看起来像:

['6', '5', 0, '-1000']
['6', '5', 0, '-1000']

['6', '5', 0, '-1000']

['6', '5', 0, '-1000']
['6', '5', 0, '-1000']
['6', '5', 0, '-1000']
['6', '5', 0, '-1000']

我现在不知道如何将0更改为1和2,依此类推,所以可能是这样的:

['6', '5', 0, '-1000']
['6', '5', 0, '-1000']

['6', '5', 1, '-1000']

['6', '5', 2, '-1000']
['6', '5', 2, '-1000']
['6', '5', 2, '-1000']
['6', '5', 2, '-1000']

结果应类似于“ file-1(已转换)”文件。

PS所有示例都经过简化,真实文件中有很多行,而且我不知道空行出现在哪里。

PPS对不起,这么长时间的发布,希望如此。 提出建议-非常高兴看到其他意见)谢谢。

好像您快到了,您一直都在插入i=0而不是空行数,请尝试以下操作:

with open("file-1.dat", "r", newline="") as f:
    sys.stdout = open('%s2 (converted).txt' % f.name, 'a')
    incsv = csv.reader(f, delimiter="\t")
    empties = 0 # init empty row counter
    for row in incsv:
        if len(row) == 6:
            row = row[0:3]
            row.insert(2, empties) # insert number of empty rows
            print(row)
        else:
            empties += 1 # if row is empty, increase counter

您需要在每个空行上增加i

import sys
import csv

with open("file-1.dat", "r") as f:
    sys.stdout = open('%s2 (converted).txt' % f.name, 'a')
    incsv = csv.reader(f, delimiter="\t")
    incsv.next() # ignore first line
    i = 0
    for row in incsv:
        if len(row) == 6:
            row = row[0:3]
            row.insert(2, i)
            print(row)
        elif len(row) == 0:
            i += 1

另外,我无法在计算机上执行您的代码(使用Python 2.7.6 )。 我根据与Python 2.x一起运行更改了代码。

编辑 :我看到它与Python 3.x运行

不使用csv模块,这有点不同。 希望这可以帮助。 :)

import sys

count = 0
with open("file-1.dat", "r") as f:
    sys.stdout = open('%s2 (converted).txt' % f.name, 'a')
    for line in f:
        converted_line = line.split()[:-3] #split each line and remove last 3 column
        if not converted_line: # if list/line is empty
            count += 1 #increase count but DO NOT PRINT/ WRITE TO FILE
        else:
            converted_line.insert(2,str(count)) # insert between 2nd and 3rd column
            print ('\t'.join(converted_line)) # join them and print them with tab delimiter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM