Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何从csv文件的第三行读取第二列_Python_File_Csv - Fatal编程技术网

Python如何从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 但我不喜欢这种方法。有谁能提出更好的方法吗?使用下一步对文

我必须解析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

但我不喜欢这种方法。有谁能提出更好的方法吗?

使用
下一步对文件进行手动迭代,而不是
循环
然后
中断

只需在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文件中是否有嵌入换行符的字段。出于一般性考虑,使用
换行符
将使其不受影响地工作,因此在我看来更好/更正确,因为它对正在读取的数据的性质做出的假设更少。