Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从txt文件中删除标题的Python代码_Python_Batch File - Fatal编程技术网

从txt文件中删除标题的Python代码

从txt文件中删除标题的Python代码,python,batch-file,Python,Batch File,我有一个包含数千个.txt文件的文件夹。我正在使用windows批处理代码从该文件夹中的所有.txt文件中删除标题(第1行到第82行)。问题是这段代码对相对较小的文件很有效,但现在我需要在大文件上使用它,而代码根本没有响应 有人能帮我在python上编写windows批处理的代码吗?先谢谢你 @echo off for %%f in (*.txt) do ( more +82 "%%f" > "%TEMP%\%%f" move /y "%TEMP%\%%f" "%%f" &

我有一个包含数千个.txt文件的文件夹。我正在使用windows批处理代码从该文件夹中的所有.txt文件中删除标题(第1行到第82行)。问题是这段代码对相对较小的文件很有效,但现在我需要在大文件上使用它,而代码根本没有响应

有人能帮我在python上编写windows批处理的代码吗?先谢谢你

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

可能是杀伤力过大,但这可能有效:

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)

PowerShell脚本不写入临时文件,而是在跳过前82行之前将原始文件移动到bak文件

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}"

cut t x 82outputfile.txt
如上所述,将
17
更改为
82
,将
csv
更改为
txt
,您实际上也遇到了同样的问题。您会注意到,给出的答案使用内置语言,这比依赖需要专门安装和配置的东西要好。还请注意,本网站不提供免费的语言转换服务,我们希望您自己尝试。您也可以检查一个文件的python解决方案。作为您选择的另一种语言,我相信您应该能够将其扩展为循环遍历目录中的所有
.txt
文件。正如您所知,在将输出重定向到文件时,通常不会暂停。但由于某些原因,当重定向到64k行时,它会暂停,要求按键继续。这就是为什么您的原始批处理脚本似乎挂起了大文件。非常感谢您的代码,但我遇到了以下错误:
code
D:\>eraseheaders.py回溯(最近一次调用最后一次):文件“D:\eraseheaders.py”,第11行,在中以f:IOError:[Errno 13]的形式打开(文件路径,'r')权限被拒绝:“D:\\txtfiles\\'
code
好的,我添加了一个小部分,只处理文本文件。对于您的目录,您是否使用
'D:\\txtfiles\\\'
?如果是这样,您可以在末尾去掉反斜杠,或将常规路径嵌套在原始字符串中:
'D:\\txtfiles'
r'D:\txtfiles'