我有一个名为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