Python код для удаления заголовков из текстовых файлов - PullRequest
2 голосов
/ 18 апреля 2019

У меня есть одна папка с тысячами TXT-файлов. Я использую пакетный код Windows для удаления заголовков (строки с 1 по 82) из ​​всех файлов .txt в этой папке. Дело в том, что этот код хорошо работает для относительно небольших файлов, но теперь мне нужно использовать его для больших файлов, а код просто не отвечает.

Может кто-нибудь помочь мне написать на python, что делает этот пакет Windows? Заранее спасибо.

@echo off
for %%f in (*.txt) do (
    more +82 "%%f" > "%TEMP%\%%f"
    move /y "%TEMP%\%%f" "%%f" > nul
)
echo Done.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Скрипт PowerShell не записывает в temp, но перемещает оригинал в файл bak, прежде чем пропустить первые 82 строки.

foreach ($File in (Get-ChildItem *.txt)){
  $BakFile = $File.FullName -replace 'txt$','bak.txt'
  Move-Item $File $BakFile -Force
  Get-Content $BakFile | Select-Object -Skip 82 | Set-Content $File
}

Для того, чтобы быть в теме то же самое, завернутый в пакетную команду / файл

powershell -NoP -C "foreach ($File in (Get-ChildItem *.txt)){$BakFile = $File.FullName -replace 'txt$','bak.txt';Move-Item $File $BakFile -Force;Get-Content $BakFile | Select-Object -Skip 82 | Set-Content $File}"
0 голосов
/ 18 апреля 2019

Возможно, излишнее, но это может сработать:

import tempfile
from io import StringIO
data = StringIO()

file_path = r'C:\Users\...\...'

# Set the numder of lines you'd like to exclude
header_end = 82


### Read your data into a StringIO container (untested for directory read!)
for i in os.listdir(file_path):
    if i.endswith('.txt'):
        with open(os.path.join(file_path, i), 'r') as f:
            data.write(f.read())

        ### Split linkes by \n (newline)
        tokens = data.getvalue().split('\n')

        ### Rejoin with a newline, but start at the header index value plus one.
        output_str = '\n'.join(tokens[header_end + 1:])

        ### Create a tempfile with '.txt' suffix; print(path) to find out file location (should be in temp folder)
        fd, path = tempfile.mkstemp(suffix='.txt')
        try:
            with os.fdopen(fd, 'w') as tmp:
                tmp.write(output_str)
        except IOError:
            print('Error writing temp file.')


        ### To rcleanup and remove the file
        if os.path.isfile(path):
            try:
                os.remove(path)
            finally:
                os.unlink(path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...