簡體   English   中英

如何從 python 腳本中捕獲多個文件的內容

[英]How to cat contents of multiple files from a python script

我想對從cat腳本生成的文件的內容進行分類。 是否可以在一個簡單的單行命令中做到這一點? 例如,我想要類似的東西:

cat <(python test.py) # doesnt work as I want to

其中 test.py 產生多個像這樣的文件名(由新行分隔)

file1.txt
file2.txt
file3.txt

我想基本上做

cat file1.txt
cat file2.txt
cat file3.txt

基本上是讀取腳本產生的文件名的內容。 假設 python 腳本可以生成數百/數千個文件名。

盡管這似乎可行

cat $(python test.py)

但問題是它似乎要等到整個python test.py完成后,才能執行任何cat 基本上,它似乎不會在獲得文件名后立即捕獲文件名的內容。 然而

cat <(python test.py)

cat獲取文件名,不幸的是,它只打印文件名而不是文件名的內容。

你可以使用sed

$ sed 's/^/cat /e' <(python3 test.py)

這將在執行命令之前在每個文件名前添加cat

^ - 這會將查找錨定到每行的開頭

cat - cat 將替換每行開頭的錨點

e - 這告訴 sed 執行由替換產生的命令,在本例中為cat file1.txt

我認為您需要在腳本中使用這些文件創建 STDOUT:

例如test.py

import os
for i in range(0,5):
  name="file" + str(i) +".txt"
  f = open(name, "a")
  f.write("Hello\n")
  f.close()
  print(name) 

像這樣的東西:

$ python test.py
file0.txt
file1.txt
file2.txt
file3.txt
file4.txt

$ cat $(python test.py)
Hello
Hello
Hello
Hello
Hello

如果你想讓在飛行中工作,這並不是那么簡單,因為在單行 bash 中我們必須等待前面的命令完成。 但是你可以嘗試做這樣的事情:

$ python test.py > /dev/null &
$ watch -n60 'find ./  -maxdepth 1 -type f -mmin -1 -exec cat {} \;'

除了使用sed ,如本答案所示,您應該考慮xargs

python3 test.py | xargs -i cat "{}"

這比cat更強大,因為與sed解決方案不同,它適用於許多非常規字符,例如'*''?' , 和' ' (但不是'\n' )。

對您的 python 腳本稍作更改,使其與帶有'\n'字符的文件名也能正常工作是微不足道的。 python 腳本中的更改將使用'\0'而不是'\n'來分隔文件名(確保在每個此類文件名之后刷新標准輸出)。 然后將xargs-0參數一起使用:

python3 test.py | xargs -0 -i cat "{}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM