在提出這個疑問之前,我搜索了其他答案。我在 Windows 11 機器上運行。我得到的 csv 檔案在某些??行之間有一個“,這在匯入 mongodb 時會導致錯誤。所以我想洗掉它。所以我發現 sed 命令執行此操作非常快。你們中的大多數人可能會推薦我在 python 中使用 replace 函式,但在這里它不可行,因為檔案大小為 5GB。當我測驗這兩種方法時,我發現 sed 快得多。
在我的系統中,我必須在命令終端中運行 bash 并進入 bash 模式,然后在那里運行 sed 命令。
我應該如何運行 subprocess.run() 命令來實作。下面是我的代碼
import subprocess
p = subprocess.run('bash' | r"sed -i 's/\"/-/g' D:\Backupfiles\MAY2021\Names.csv", shell=True, capture_output=True, check=True)
print(p.returncode)
下面給出的是我在運行上述代碼時遇到的錯誤。
"C:\Users\AEC Office Kollam\anaconda3\envs\SDR Project\python.exe" "C:/Users/AEC Office Kollam/Documents/Atom/Python/MongoDB/SDR Project/subprocesstutorial.py"
Traceback (most recent call last):
File "C:\Users\AEC Office Kollam\Documents\Atom\Python\MongoDB\SDR Project\subprocesstutorial.py", line 3, in <module>
p = subprocess.run('bash' r"sed -i 's/\"/-/g' D:\Backupfiles\MAY2021\SDR1\BSNL\BSNL-DEC2020-EKYCC.csv", shell=True, capture_output=True, check=True)
File "C:\Users\AEC Office Kollam\anaconda3\envs\SDR Project\lib\subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'bashsed -i 's/\"/-/g' D:\Backupfiles\MAY2021\SDR1\BSNL\BSNL-DEC2020-EKYCC.csv' returned non-zero exit status 1.
uj5u.com熱心網友回復:
如果您正在運行 Windows:
使用 cygwin - https://www.geeksforgeeks.org/how-to-use-linux-commands-in-windows-with-cygwin/
使用 sed 之類的命令 -
get-content somefile.txt | %{$_ -replace "expression","replace"}
或者
get-content somefile.txt | where { $_ -match "expression"}
select-string somefile.txt -pattern "expression"
如果您正在運行 linux,這將適用于您:
out_file = open(outp, "w")
sub = subprocess.call(['sed', 's/\"//g', inp], stdout=out_file )
uj5u.com熱心網友回復:
sed只是 bash 從某個地方運行的程式,所以你應該能夠直接運行它subprocess.run(或者subprocess.call如果你使用的是舊版本的 Python)。
在 bash 中,用于type -p sed查找 sed 程式的位置。
我建議考慮你是否真的需要shell=True. 我的猜測是你沒有。Tal Folkman 的回答中的 Linux 代碼之類的東西應該可以做到。大多數時候,在這里使用 shell 只會增加參考的麻煩。
如果你真的想通過 bash,你將不得不使用-cflag 來 bash。就像是
subprocess.run([r'C:\whatever\bash.exe', '-c', 'sed -i -e "s/foo/bar/" input.dat'])
uj5u.com熱心網友回復:
感謝以上兩個答案,我能夠找出我的問題的答案。
我的 csv 檔案包含一個“沒有和結尾”。csv 檔案太大,python 替換命令無法處理。這是我的最終代碼。
import subprocess
subprocess.run(["bash", "-c", "sed -i 's/\"//g' Name.csv"], capture_output=True, shell=True, check=True)
sed -i 's/\"//g' Name.csv在這里,我們必須使用 a\命令才能作業。除此之外,我們可以使用此命令替換任何型別檔案上的任何內容。
謝謝大家的見解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417461.html
標籤:
