簡體   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