Как разделить содержание файла?

У меня есть текстовый файл, который содержит точно тысячу строк. Я хочу разделить файл на 1 000 различных файлов путем записи каждой строки в отдельный текстовый файл. И я хочу, чтобы название splitted файлов было в последовательном порядке.

Пример:

foo.txt файл содержит,

foo
bar
...
...
lastfoo

Первый файл Splitted должен содержать только одну строку foo и это - имя, был бы bar1.txt. И второй файл должен содержать только одну строку bar и это - имя, был бы bar2.txt аналогично для последнего файла должен содержать строку lastfoo и название последнего файла было бы bar1000.txt.

Командная строка (Один лайнер) путь была бы лучше, а не сценарий путь.

2
задан 25 May 2014 в 15:05

3 ответа

используйте это

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
5
ответ дан 7 October 2019 в 18:57

Так как Вы упомянули, что командная строка будет лучше, я понял, что сценарий не предпочтен, но не исключен также.

В сценарии ниже, определить 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.
2
ответ дан 7 October 2019 в 18:57
  • Все еще одна строка:):

    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
    
1
ответ дан 7 October 2019 в 18:57

Другие вопросы по тегам:

Похожие вопросы: