我有一個資料框。我想將此資料幀從 excel 檔案寫入 csv 而不將其保存到磁盤。看起來 StringIO() 是明確的解決方案。然后我想用 open() 從記憶體中打開像物件一樣的檔案,但是遇到了型別錯誤。如何解決這種型別的錯誤并使用 open() 讀取記憶體中的 csv 檔案?或者,實際上,假設 open() 會起作用是錯誤的嗎?
TypeError: expected str, bytes or os.PathLike object, not StringIO
錯誤參考了下面的行。從更下面的代碼。
f = open(writer_file)
為了得到一個合適的例子,我必須在創建后打開檔案“pandas_example”。然后我洗掉了一行,然后代碼運行到一個空行。
from pandas import util
df = util.testing.makeDataFrame()
df.to_excel('pandas_example.xlsx')
df_1 = pd.read_excel('pandas_example.xlsx')
writer_file = io.StringIO()
write_to_the_in_mem_file = csv.writer(writer_file, dialect='excel', delimiter=',')
write_to_the_in_mem_file.writerow(df_1)
f = open(writer_file)
while f.readline() not in (',,,,,,,,,,,,,,,,,,\n', '\n'):
pass
final_df = pd.read_csv(f, header=None)
f.close()
uj5u.com熱心網友回復:
把它想象writer_file成從 中回傳的東西open(),你不需要再次打開它。
例如:
import pandas as pd
from pandas import util
import io
# Create test file
df = util.testing.makeDataFrame()
df.to_excel('pandas_example.xlsx')
df_1 = pd.read_excel('pandas_example.xlsx')
writer_file = io.StringIO()
df_1.to_csv(writer_file)
writer_file.seek(0) # Rewind back to the start
for line in writer_file:
print(line.strip())
該to_csv()呼叫以 CSV 格式將資料幀寫入您的記憶體檔案。
uj5u.com熱心網友回復:
后
writer_file = io.StringIO()
,writer_file已經是一個類似檔案的物件。它已經有一個readline方法,還有read, write, seek, 等等。見io.TextIOBase, 其中io.StringIO繼承自。
換句話說,open(writer_file)是不必要的,或者更確切地說,它會導致型別錯誤(正如您已經觀察到的那樣)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466935.html
上一篇:stm32F103RCT6使用FFT運算分析波形詳解(非常新手)
下一篇:使用Java流從csv檔案中過濾
