在python中读取csv文件两次

2024-09-30 06:24:32 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的Python代码:

import csv

# Reading
ordersFile = open('orders.csv', 'rb')
ordersR = csv.reader(ordersFile, delimiter=',')

# Find order employeeID=5, shipCountry="Brazil"
print "Find order employeeID=5, shipCountry=\"Brazil\""
for order in ordersR:
    if order[2] == '5' and order[13] == 'Brazil':
        print order
# Find order employeeID=5
print "Find order employeeID=5"
for order in ordersR:
    if order[2] == '5':
        print order
ordersFile.close()

我可以打印一些“#Find order employeeID=5,shippcountry=”巴西“的内容,但是对于Find order employeeID=5,我什么也没有。我在考虑如何多次读取(选择)同一个csv文件中的行。在


Tags: csv代码inimportforiforderfind
3条回答

您可以简单地将reader对象结果转换为一个列表:

with open('orders.csv', 'rb') as ordersFile:
    ordersR = list(csv.reader(ordersFile, delimiter=','))

reader对象就像一个生成器,一旦迭代了值,就不能再开始第二个循环来再次读取值。在

最好一次读取一次文件,因为I/O可能是程序中最慢的部分。在

如果您需要重新读取文件,您可以关闭它并重新打开它,或者在开始处添加^{},即在循环之间添加ordersFile.seek(0)。在

你只是在读CSV文件,但是如果你想在多个过程中处理数据,你应该把内容读入一个变量中。这样你就不必每次需要处理文件时都重新读取它。在

import csv

# Read order rows into our list
# Here I use a context manager so that the file is automatically
# closed upon exit
with open('orders.csv') as orders_file:
    reader = csv.reader(orders_file, delimiter=',')
    orders = list(reader)

# Find order employeeID=5, shipCountry="Brazil"
print "Find order employeeID=5, shipCountry=\"Brazil\""
for order in orders:
    if order[2] == '5' and order[13] == 'Brazil':
        print order

# Find order employeeID=5
print "Find order employeeID=5"
for order in orders:
    if order[2] == '5':
        print order

如果你的CSV文件太大而无法放入内存(或者由于某种原因你不想把它全部读入内存),那么你需要一种不同的方法。如果你需要,请留言。在

相关问题 更多 >

    热门问题