У меня есть текстовый файл, который содержит точно тысячу строк. Я хочу разделить файл на 1 000 различных файлов путем записи каждой строки в отдельный текстовый файл. И я хочу, чтобы название splitted файлов было в последовательном порядке.
Пример:
foo.txt
файл содержит,
foo
bar
...
...
lastfoo
Первый файл Splitted должен содержать только одну строку foo
и это - имя, был бы bar1.txt
. И второй файл должен содержать только одну строку bar
и это - имя, был бы bar2.txt
аналогично для последнего файла должен содержать строку lastfoo
и название последнего файла было бы bar1000.txt
.
Командная строка (Один лайнер) путь была бы лучше, а не сценарий путь.
используйте это
split -l1 -a4 -d foo.txt bar
, это создает 1 000 файлов:
bar0000
bar0001
bar0002
bar0003
...
см. man split
для больше.... Об опциях:
-l, --lines=NUMBER
put NUMBER lines per output file
-a, --suffix-length=N
use suffixes of length N (default 2)
-d, --numeric-suffixes
use numeric suffixes instead of alphabetic
Так как Вы упомянули, что командная строка будет лучше, я понял, что сценарий не предпочтен, но не исключен также.
В сценарии ниже, определить sourcefile
, destination directory
и (вывод)filename
в верхней строке.
В строке:
while currnumber <= len(lines) and currnumber <= 1000:
последний outputline определяется, чтобы быть строкой 1000, но это может, конечно, быть установлено на любую (макс.) строку, если Вы хотите ограничить вывод. С другой стороны, можно удалить and currnumber <= 1000
часть, для экспорта всех строк.
Использовать другого (или не) расширение, замена .txt
, или удалите +".txt"
Сценарий:
#!/usr/bin/python3
source = "sourcefile"; destination = "/path/to"; outfilename = "outfilename"
with open(source) as lines:
lines = lines.readlines()
currnumber = 1
while currnumber <= len(lines) and currnumber <= 1000:
file = destination+"/"+outfilename+str(currnumber)+".txt"
with open(file, "wt") as writefile:
writefile.write(lines[currnumber-1])
currnumber = currnumber+1
Вставьте его в пустом файле, сохраните его как export_lines.py
и выполненный это командой:
python3 /path/to/script/export_lines.py
Результат:
outfilename1.txt
outfilename2.txt
etc.
Все еще одна строка:):
c=0; while read -r LINE || [[ -n $LINE ]]; do c=$(( $c+1 )); echo $LINE>bar$c.txt; done <foo.txt
Слишком длинная команда, это лучше с псевдонимом:
alias s='c=0; while read -r LINE || [[ -n $LINE ]]; do c=$(( $c+1 )); echo $LINE>bar$c.txt; done <'
Выполнение как:
s foo.txt