python 按行切分文字檔案

2021-06-18 04:36:43 字數 1437 閱讀 2216

python指令碼利用shell命令來實現文字的操作, 這些命令大大減少了我們的**量。

比如按行切分檔案並返回切分後得到的檔案列表,可以利用內建的split命令進行切分。為了返回得到的檔案列表名,可以先將檔案切分到自建的子目錄中,然後通過

os.listdir獲取所有檔案,再將這些檔案移到上一級目錄(即函式引數指定的新目錄),刪除自建子目錄,最後返回該檔名列表。

**如下,如發現問題歡迎指正:

# 建立新路徑

def make_dirs(path):

if not os.path.isdir(path):

os.makedirs(path)

# 獲取檔案的行數

def get_total_lines(file_path):

if not os.path.exists(file_path):

return 0

cmd = 'wc -l %s' % file_path

return int(os.popen(cmd).read().split()[0])

# 函式split_file_by_row: 按行切分檔案

# filepath: 切分的目標檔案

# new_filepath: 生成新檔案的路徑

# row_cnt: 每個檔案最多包含幾行

# suffix_type: 新檔案字尾型別,如兩位字母或數字

# return: 切分後的檔案列表

def split_file_by_row(filepath, new_filepath, row_cnt, suffix_type='-d'):

tmp_dir = "/split_file_by_row/"

make_dirs(new_filepath)

make_dirs(new_filepath+tmp_dir)

total_rows = get_total_lines(filepath)

file_cnt = int(math.ceil(total_rows*1.0/row_cnt))

command = "split -l%d -a2 %s %s %s" % (row_cnt, suffix_type, filepath, new_filepath+tmp_dir)

os.system(command)

filelist = os.listdir(new_filepath+tmp_dir)

command = "mv %s/* %s"%(new_filepath+tmp_dir, new_filepath)

os.system(command)

command = "rm -r %s"%(new_filepath+tmp_dir)

os.system(command)

return [new_filepath+fn for fn in filelist]

shell按行分割文字檔案

大家常用的分割文字的方法都是通過sed n 命令來操作,sed 的優點是可以指定具體的行,缺點每次分割要重新讀取整個文字,效率低了點。在高人指點下發現split這個方法好用些,也參考了其他的資料總結一下split用法。split 引數 需要分割的檔案 b size 對file進行切分,每個小檔案大小...

linux讀取按行讀寫文字檔案

1.include 2.include 3.include 4.include 5.include 6.include 7.8.9.typedef struct item t item 13.14.15.去除字串右端空格 16.17.char strtrimr char pstr 18.25.26....

VC和C 按行讀取文字檔案

1.mfc cstring filename d 3.txt files d 32.txt filestring cstdiofile f,g if f.open filename,cfile moderead true filename為開啟檔名 cstring decimaltobinary c...