Python如何从csv文件的第三行读取第二列
我必须解析csv文件,文件中的第一个有用信息位于第三行和第二列 以下是我迄今为止所做工作的一个片段:Python如何从csv文件的第三行读取第二列,python,file,csv,Python,File,Csv,我必须解析csv文件,文件中的第一个有用信息位于第三行和第二列 以下是我迄今为止所做工作的一个片段: f = open(filename, r) reader = csv.reader(f, delimeter=';') i=0 for row in reader: if (i == 2): useful_data = row[2] break else: i += 1 但我不喜欢这种方法。有谁能提出更好的方法吗?使用下一步对文
f = open(filename, r)
reader = csv.reader(f, delimeter=';')
i=0
for row in reader:
if (i == 2):
useful_data = row[2]
break
else:
i += 1
但我不喜欢这种方法。有谁能提出更好的方法吗?使用
下一步对文件进行手动迭代,而不是循环然后中断
只需在csv阅读器上使用next
跳过任意多行,然后最后一次使用next
并选择所需的列:
with open(filename) as f:
reader = csv.reader(f, delimiter=';')
# skip 2 rows
for _ in range(2):
next(reader)
useful_data = next(reader)[2]
使用next
只需在csv阅读器上使用next
跳过任意多行,然后最后一次使用next
并选择所需的列:
with open(filename) as f:
reader = csv.reader(f, delimiter=';')
# skip 2 rows
for _ in range(2):
next(reader)
useful_data = next(reader)[2]
你到底不喜欢它什么?我认为稍微好一点的版本是:
with open(filename, 'r') as f:
reader = csv.reader(f, delimiter=';')
for i, row in enumerate(reader):
if i == 2:
useful_data = row[2]
break
你到底不喜欢它什么?我认为稍微好一点的版本是:
with open(filename, 'r') as f:
reader = csv.reader(f, delimiter=';')
for i, row in enumerate(reader):
if i == 2:
useful_data = row[2]
break
itertools.islice
可以让事情变得简单:
with open(filename) as f:
reader = csv.reader(f, delimiter=';')
useful_data = next(islice(reader, 2, None))[2]
itertools.islice
可以让事情变得简单:
with open(filename) as f:
reader = csv.reader(f, delimiter=';')
useful_data = next(islice(reader, 2, None))[2]
你必须使用python吗?使用awk、sed等还有更简单的方法。@Gautam如果csv是多行的,值中有引号和空格…请注意,代码段有拼写错误:r=>“r”和delimeter
=>分隔符
是的,我必须使用python,软件是用python编写的。您的解决方案有何缺陷?您想改进什么?必须使用python吗?使用awk、sed等还有更简单的方法。@Gautam如果csv是多行的,值中有引号和空格…请注意,代码段有拼写错误:r=>“r”和delimeter
=>分隔符
是的,我必须使用python,软件是用python编写的。您的解决方案有何缺陷?您想改进什么?您的代码仍然与OP attempts有相同的打字错误。我不喜欢if-else语句和for循环只是为了达到特定的行。我希望得到一些像下面@Jean François Fabre Fabre发布的东西,但是没有一个for loopYes,Jean François,copy粘贴了一些错误@加延德拉:谢谢你的澄清。你的代码仍然和OP-attempts一样有打字错误。我不喜欢if-else语句和for循环只是为了达到一个特定的行。我希望得到一些像下面@Jean François Fabre Fabre发布的东西,但是没有一个for loopYes,Jean François,copy粘贴了一些错误@gajendra:谢谢你的澄清。我喜欢你的解决方案,但我们是否能以某种方式摆脱for循环?对于要跳过的两行,是的,你可以调用next(reader)
两次:)哈哈。。那里的人很好;)使用islice有一个很好的解决方案,请查看。它使用一个循环,但至少不是python循环我喜欢你的解决方案,但我们能以某种方式摆脱for循环吗?对于要跳过的两行,是的,你可以调用next(reader)
两次:)哈哈。。那里的人很好;)使用islice有一个很好的解决方案,请查看。它使用了一个循环,但至少它不是python循环,谢谢您的理解。顺便说一句,我认为为行和列值的硬编码常量命名会更清晰/更有用:即next(islice(reader,row+1,None))[column]
。此外,在Python3中,csv文件应该用换行符='
关键字参数打开
设置。@martineau对constantsNot完全同意。当我尝试使用'rb'
而不是换行符=''
时,我得到了一个\u csv。错误:迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?
)。如果没有换行符,它是否“工作”将取决于csv文件中是否有嵌入换行符的字段。出于一般性考虑,使用换行符
将使其不受影响地工作,因此在我看来更好/更正确,因为它对正在读取的数据的性质做出的假设更少。感谢您的理解。顺便说一句,我认为为行和列值的硬编码常量命名会更清晰/更有用:即next(islice(reader,row+1,None))[column]
。此外,在Python3中,csv文件应该用换行符='
关键字参数打开
设置。@martineau对constantsNot完全同意。当我尝试使用'rb'
而不是换行符=''
时,我得到了一个\u csv。错误:迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?
)。如果没有换行符,它是否“工作”将取决于csv文件中是否有嵌入换行符的字段。出于一般性考虑,使用换行符
将使其不受影响地工作,因此在我看来更好/更正确,因为它对正在读取的数据的性质做出的假设更少。