从txt文件中删除标题的Python代码
我有一个包含数千个.txt文件的文件夹。我正在使用windows批处理代码从该文件夹中的所有.txt文件中删除标题(第1行到第82行)。问题是这段代码对相对较小的文件很有效,但现在我需要在大文件上使用它,而代码根本没有响应 有人能帮我在python上编写windows批处理的代码吗?先谢谢你从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" &
@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'