我有一個名爲myfile.txt
的文本文件。該文件包含50,000行,我想將其分成50個文本文件。我知道拆分命令很簡單:分割命令 - 選擇輸出名稱
split myfile.txt
這將輸出50個1000行文件:xaa,xab和xac。
我的問題,我怎麼跑分裂我的文本文件,以便它命名輸出文件:在Python或bash
1.txt
2.txt
3.txt
...
50.txt
尋找答案吧。謝謝!
我有一個名爲myfile.txt
的文本文件。該文件包含50,000行,我想將其分成50個文本文件。我知道拆分命令很簡單:分割命令 - 選擇輸出名稱
split myfile.txt
這將輸出50個1000行文件:xaa,xab和xac。
我的問題,我怎麼跑分裂我的文本文件,以便它命名輸出文件:在Python或bash
1.txt
2.txt
3.txt
...
50.txt
尋找答案吧。謝謝!
下面是一個使用itertools.islice
拿到塊和字符串格式化爲不同的文件名潛在的解決方案:
from itertools import islice
with open('myfile.txt') as in_file:
for i in range(1, 51):
with open('{0}.txt'.format(i), 'w') as out_file:
lines = islice(in_file, 1000)
out_file.writelines(lines)
它不是你正在尋找什麼,但運行
split -d myfile.txt
會輸出
x00
x01
x02
...
下面是如何分裂硫的例子在bash S檔:
split -l 1000 -d --additional-suffix=.txt myfile.txt
的-l
參數確定包括在每個劃分的文件的行數(1000在這種情況下,50名總的文件)時,-d
參數使用,而不是字母后綴的數字,並我們傳遞給--additional-suffix
參數的值給每個文件一個.txt
文件擴展名。
這將創建
x00.txt
x01.txt
x01.txt
等
如果你想改變輸出文件的「X」部分,你想要輸入的文件後添加一個前綴(如myfile.txt f
將創建f01.txt
,f02.txt
等)
請注意,如果沒有--additional-suffix
,您的文件將全部缺少文件擴展名。
我看過,看看有沒有辦法分割一個文件並命名爲只有的後綴,但我還沒有找到任何東西。
爲了生成空目錄的測試數據,可以使用
seq 50000 | split -d
要在你希望的方式重新命名,你可以使用
ls x* | awk '{print $0, (substr($0,2)+1) ".txt"}' | xargs -n2 mv
一個簡單的方法:
f=open('your_file')
count_line,file = 0,1
for x in f:
count_line +=1
if count%1000 == 1:
f1 = open(str(file) + '.txt','w')
f1.write(x)
file +=1
elif count_line%1000 == 0:
f1.write(x)
f1.close()
else:f1.write(x)
這裏有一個有趣的例子:如果您的split
命令支持--filter
選項,您可以se it!
如果你打電話
split --filter=./banana myfile.txt
然後命令./banana
將與環境變量FILE
集執行的名稱split
會選擇寫它的處理塊。該命令將在其標準輸入中接收正在處理的塊。如果此命令返回非零狀態碼,則拆分將中斷其操作。
加上-d
選項,這正是你想要的。隨着-d
選項,名稱拆分爲文件名會選擇將x01
,x02
等
使腳本:
#!/bin/bash
# remove the leading x from FILE
n=${FILE#x}
# check that n is a number
[[ $n = +([[:digit:]]) ]] || exit 1
# remove the leading zeroes from n
n=$((10#$n))
# send stdin to file
cat > "$n.txt"
調用此腳本banana
,chmod +x
它,讓我們去:
split -d --filter=./banana myfile.txt
這個--filter
選項真的很有趣。
什麼版本支持'--filter'?它似乎不支持Mac OS X 10.10附帶的BSD'split'或GNU coreutils 8.4附帶的GNU'split'。 – chepner 2014-11-03 21:58:04
@chepner'split(GNU coreutils)8.21'。我剛剛通過閱讀'man'頁面發現了這個時髦的選項。漂亮的把戲。 – 2014-11-03 22:00:34
任何原因,所以我可以糾正我錯在哪裏? – Hackaholic 2014-11-03 23:21:38
不是我的失望,但是否這個工作,這是寫得很差的代碼。 – 2014-11-04 18:38:21