爲什麼不提供工作代碼(包括進口)和上下文管理器包裹像往常一樣物理資源?
像這樣:
#! /usr/bin/env python
"""Only strip those rows that start with hash (#)."""
import csv
IN_F_PATH = "/home/stephen/Desktop/paths_output.csv"
OUT_F_PATH = "/home/stephen/Desktop/paths_output2.csv"
with open(IN_F_PATH, 'rb') as i_f, open(OUT_F_PATH, "wb") as o_f:
writer = csv.writer(o_f)
for row in csv.reader(i_f):
if row and row[0].startswith('#'):
continue
writer.writerow(row)
一些注意事項:
- 文件的關閉由離開上下文塊自動化,
- 名字都更好選擇,因爲輸入以及一關鍵字...
- 你可能想包括空行,我只讀你想從問題中去掉註釋行,所以檢測這些並繼續。
- 它是行[0],它是第一列字符串,並且開始#本地映射到最匹配的簡單字符串「方法」。
如果你也可能想要去除空行,不是一個可以使用以下條件continue
代替:
if not row or row and row[0].startswith('#'):
,你應該準備好了。 HTH
要回答上面的代碼行,也會跳過空白輸入「行」的評論。 在Python我們從左到右(懶惰的評價)和短路的布爾表達式這樣:
>>> row = ["#", "42"]
>>> if not row or row and row[0].startswith("#"):
... print "Empty or comment!"
...
Empty or comment!
>>> row = []
>>> if not row or row and row[0].startswith("#"):
... print "Empty or comment!"
...
Empty or comment!
它不是一個空行,它可能是在排空字符串[0]。 'print row'會幫你調試。請注意,您也可以使用'grep -E -v'^#'input.csv> output.csv' – Lynch
通常在執行代碼時提供報告的堆棧跟蹤有助於作爲輸入文件的精簡版本... – Dilettant
使用'.startswith('#')'檢查一個字符串是否以散列值開始。 –