[python]MergeTxt按列合並同一個文件下多個txt文件


開發需求:應項目需要,要將記錄成txt的實驗數據進行按列合並(也即為不同文件上下合並),從而進行機器學習訓練.
實驗數據類似如此

模擬驗證數據

1.txt
*****1*****
abcdefghijklmn
opqrstuvwxyz
hhhhhhhhhhhhhhhhhhh
2.txt
*****2*****
12345678910
11121314151
123456897897
1231564564879
2132564644561
3.txt
*****3*****
wkhdwadadfa
wdawadwfafa
fggfwgwgqws
sssssssssss
4.txt
*****4*****
wdawadwfafa
fggfwgwgqws
sssssssssss
wkhdwadadfa

運行結果

最終結果

# -*- coding:utf-8*-
import sys

import os
import os.path
import time

time_start = time.time()
'''
    “a” 以“追加”模式打開, (從 EOF 開始, 必要時創建新文件)
    “a+” 以”讀寫”模式打開
    “ab” 以”二進制 追加”模式打開
    “ab+” 以”二進制 讀寫”模式打開
    
    “w” 以”寫”的方式打開
    “w+” 以“讀寫”模式打開
    “wb” 以“二進制 寫”模式打開
    “wb+” 以“二進制 讀寫”模式打開
    
    “r+” 以”讀寫”模式打開
    “rb” 以”二進制 讀”模式打開
    “rb+” 以”二進制 讀寫”模式打開
    
    rU 或 Ua 以”讀”方式打開, 同時提供通用換行符支持 (PEP 278)
    1、使用“w”模式。文件若存在,首先要清空,然后重新創建 
    2、使用“a”模式。把所有要寫入文件的數據都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,將自動被創建。
    
    3、f.read([size]) :size未指定則返回整個文件,如果文件大小>2倍內存則有問題。f.read()讀到文件尾時返回”“(空字串) 
    4、file.readline() 返回一行 
    5、file.readline([size]) 返回包含size行的列表,size 未指定則返回全部行 
    6、”for line in f: print line” #通過迭代器訪問 
    7、f.write(“hello\n”) #如果要寫入字符串以外的數據,先將他轉換為字符串. 
    8、f.tell() 返回一個整數,表示當前文件指針的位置(就是到文件頭的比特數). 
    9、f.seek(偏移量,[起始位置]) : 用來移動文件指針 
    偏移量 : 單位“比特”,可正可負 
    起始位置 : 0 -文件頭, 默認值; 1 -當前位置; 2 -文件尾 
    10、f.close() 關閉文件
'''


# 合並同一個文件夾下多個txt#
def MergeTxt(filepath='', outfile='', rmode='', ntag=False):
    '''
    @param filepath: 合並的文件目錄
    @param outfile:  合並輸出文件目錄
    @param rmode:    讀寫模式
    @param ntag:     是否換行標記
    '''
    print('merge start')
    # open(path, ‘-模式 -‘, encoding =’UTF - 8’)
    k = open(filepath + outfile, rmode)
    for parent, dirnames, filenames in os.walk(filepath):
        # 需針對當前文件做升序排序,否則按照os.walk的規則,遍歷列表是亂序的
        filenames.sort(key=None, reverse=False)
        for filepath in filenames:
            # filepath 即為遍歷目錄列表中當前文件路徑
            # txtpath 即為所有文件夾的路徑
            txtPath = os.path.join(parent, filepath)
            print('open file:', filepath)
            f = open(txtPath)
            if (ntag):
                k.write(f.read() + "\n")
            else:
                k.write(f.read())

    k.close()
    print('finished')


# 合並同一個文件夾下多個txt#
def MergeTxt_range(filepath='', outfile='', rmode='', ntag=False, range_start = 1, range_end = 31):
    '''
    @param filepath: 合並的文件目錄
    @param outfile:  合並輸出文件目錄
    @param rmode:    讀寫模式
    @param ntag:     是否換行標記
    '''
    print('merge start')
    # open(path, ‘-模式 -‘, encoding =’UTF - 8’)
    k = open(filepath + outfile, rmode)
    for num in range(range_start, range_end):
        txtPath = filepath + str(num) + '.txt'
        print('txtpath', txtPath)
        f = open(txtPath)
        if (ntag):
            k.write(f.read() + "\n")
        else:
            k.write(f.read())

    k.close()
    print('finished')


if __name__ == '__main__':
    filepath = "/home/leoxae/PycharmProjects/Test/trainData/dragging/dragging_gz_train/"
    outfile = "dragging_gz_train.txt"
    rmode = 'a+'
    ntag = True
    MergeTxt_range(filepath, outfile, rmode, ntag,11,31)
    time_end = time.time()
    print(u'總共耗時:' + str(time_end - time_start) + 's')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM