我有這個代碼:
with open("db.csv", "r") as file:
for row in file:
row = row.strip()
print("Stripped:", row)
task = tuple(row.split(";"))
print("Splitted:", task)
那就是打開這個 csv 檔案:
asdf; [(datetime.datetime(2021, 10, 23, 14, 8, 8, 198986), 'asdf')]; 2012-12-12 12:12:00; 0
adsf; [(datetime.datetime(2021, 10, 23, 14, 45, 30, 806811), 'asdf')]; None; 0
輸出是這樣的:
Stripped: asdf; [(datetime.datetime(2021, 10, 23, 14, 8, 8, 198986), 'asdf')]; 2012-12-12 12:12:00; 0
Splitted: ('asdf', " [(datetime.datetime(2021, 10, 23, 14, 8, 8, 198986), 'asdf')]", ' 2012-12-12 12:12:00', ' 0')
Stripped: adsf; [(datetime.datetime(2021, 10, 23, 14, 45, 30, 806811), 'asdf')]; None; 0
Splitted: ('adsf', " [(datetime.datetime(2021, 10, 23, 14, 45, 30, 806811), 'asdf')]", ' None', ' 0')
為什么row.strip()只洗掉"\n"行,而不洗掉拆分串列中專案開頭的空格?
編輯:我row = row.replace(" ", "")在拆分之前添加了,這可以作為解決方法,但我仍然想知道為什么strip()沒有按我預期的那樣作業。
uj5u.com熱心網友回復:
在您的函式中,您strip()在完整字串上呼叫了,因此如果您的字串是:
“ABC”
這將變成
“abc”
洗掉的所有空間僅在邊緣。
因此,要洗掉在使用 strip之前必須拆分的所有空格,請使用 for 回圈或串列理解,例如:
task = tuple([item.strip() for item in row.split(";")])
uj5u.com熱心網友回復:
原因是:因為它是這樣定義的:
回傳洗掉前導和尾隨字符的字串副本。
來源:Python 檔案,重點是我的。
怎么strip()知道你會在之后拆分它并且在那之后不想要空格?因此,您需要split()先呼叫strip()所有專案,然后再呼叫。
與您的解決方法相反:
回傳字串的副本,其中所有出現的子字串 old 都被 new 替換。
來源:Python 檔案,重點是我的。
警告說明:您當前的 CSV 資料可能非常簡單,您只需在分號處將其拆分即可。但是,可以將分號作為資料的一部分,例如
data1;"data;2";data3
讓自己養成使用正確工具來完成作業的習慣。在本例中為CSV 閱讀器。它將為您處理特殊情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333178.html
上一篇:列印字串的前N??個字符(C)
