![](/img/trans.png)
[英]Index out of range for simple `readlines` operation in Python
[英]Python “String Index Out of Range” during for row operation
希望能對您有所幫助。 我正在嘗試遍歷.csv文件並刪除其中第一項的第一個字符為#的行。 盡管我的代碼確實刪除了必要的行,但出現了“字符串索引超出范圍”錯誤。
我的代碼如下:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if (row[0][0]) != '#':
writer.writerow(row)
input.close()
output.close()
據我所知,我沒有要迭代的空行。
我懷疑有些行的第一個單元格為空,因此row[0][0]
嘗試訪問空字符串的第一個字符。
你應該試試:
for row in csv.reader(input):
if not row[0].startswith('#'):
writer.writerow(row)
在嘗試建立索引之前,請檢查字符串是否為空,並if row[0]
進行檢查:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if row[0] and row[0][0] != '#': # here
writer.writerow(row)
input.close()
output.close()
或簡單地使用if row[0].startswith('#')
作為條件
您可能會遇到一個空字符串。
也許嘗試
`if row and row [0] [0]!='#':
那么為什么不通過首先檢查行是否為空來確保即使碰到它們也不會碰到任何一個,就像這樣:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if row:
if (row[0][0]) != '#':
writer.writerow(row)
else:
continue
input.close()
output.close()
同樣,在處理* .csv文件時,最好在文本編輯器中查看它們,以確保定界符和end_of_line字符與您認為的一樣。 嗅探器也是一本好書。
干杯
為什么不提供工作代碼(包括導入)並像往常一樣在上下文管理器中包裝物理資源?
像這樣:
#! /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)
一些注意事項:
如果您也可能希望刪除空行,則可以使用以下條件continue
:
if not row or row and row[0].startswith('#'):
並且您應該准備出發。 高溫超導
為了回答上述代碼行的注釋,這還會導致跳過空白輸入“行”。 在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!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.