Python检查csv文件中的值
我得到了URL列表,例如:Python检查csv文件中的值,python,loops,csv,if-statement,Python,Loops,Csv,If Statement,我得到了URL列表,例如: urls_list = [ "http://yandex.ru", "http://google.ru", "http://rambler.ru", "http://google.ru", "http://gmail.ru", "http://mail.ru" ] 我需要打开csv文件,检查文件中列表中的每个值是否跳到下一个值,否则(如果值不在列表中)将该值添加到列表中 结果:第一次运行-添加所有行(如果文件为空),第
urls_list = [
"http://yandex.ru",
"http://google.ru",
"http://rambler.ru",
"http://google.ru",
"http://gmail.ru",
"http://mail.ru"
]
我需要打开csv文件,检查文件中列表中的每个值是否跳到下一个值,否则(如果值不在列表中)将该值添加到列表中
结果:第一次运行-添加所有行(如果文件为空),第二次运行-不执行任何操作,因为文件中的所有元素都已存在
A编写了代码,但它的工作完全不正确:
import csv
urls_list = [
"http://yandex.ru",
"http://google.ru",
"http://rambler.ru",
"http://google.ru",
"http://gmail.ru",
"http://mail.ru"
]
with open('urls_list.csv', 'r') as fp:
for row in fp:
for url in urls_list:
if url in row:
print "YEY!"
with open('urls_list.csv', 'a+') as fp:
wr = csv.writer(fp, dialect='excel')
wr.writerow([url])
将文件读入变量-
with open('urls_list.csv', 'r') as fp:
s = fp.read()
检查每个列表项是否都在文件中,如果没有,请保存它
missing = []
for url in urls_list:
if url not in s:
missing.append(url + '\n')
将缺少的url写入文件
if missing:
with open('urls_list.csv', 'a+') as fp:
fp.writelines(missing)
将文件读入变量-
with open('urls_list.csv', 'r') as fp:
s = fp.read()
检查每个列表项是否都在文件中,如果没有,请保存它
missing = []
for url in urls_list:
if url not in s:
missing.append(url + '\n')
将缺少的url写入文件
if missing:
with open('urls_list.csv', 'a+') as fp:
fp.writelines(missing)
考虑到您的文件只有一列,
csv
模块可能有点过头了
以下是一个版本,该版本首先读取文件中的所有行,然后重新打开文件以写入文件中尚未包含的URL:
lines = open('urls_list.csv', 'r').read()
with open('urls_list.csv', 'a+') as fp:
for url in urls_list:
if url in lines:
print "YEY!"
else:
fp.write(url+'\n')
考虑到您的文件只有一列,
csv
模块可能有点过头了
以下是一个版本,该版本首先读取文件中的所有行,然后重新打开文件以写入文件中尚未包含的URL:
lines = open('urls_list.csv', 'r').read()
with open('urls_list.csv', 'a+') as fp:
for url in urls_list:
if url in lines:
print "YEY!"
else:
fp.write(url+'\n')
您正在以读取模式打开文件,然后在读取时重新打开以追加。这是所有问题的根源。正如Mauro所说:使用第二个文件进行附加。但我需要在csv文件中添加list元素,并检查元素是否不在文件中-执行一些代码并在文件中写入元素,如果文件中的元素跳过此元素并转到下一个,如果下一个元素不在文件中-执行一些代码并在文件中写入元素,等等……你真的需要
csv
?考虑到您的文件只有一列,我的主要目标是实现这一点:1。我解析xml站点地图并查找每个链接。2.解析内容,并存储在文件中。3.我需要检查我是否已经解析了这个url-跳过,然后转到下一个url。您正在以读取模式打开一个文件,然后在读取时重新打开它以附加。这是所有问题的根源。正如Mauro所说:使用第二个文件进行附加。但我需要在csv文件中添加list元素,并检查元素是否不在文件中-执行一些代码并在文件中写入元素,如果文件中的元素跳过此元素并转到下一个,如果下一个元素不在文件中-执行一些代码并在文件中写入元素,等等……你真的需要csv
?考虑到您的文件只有一列,我的主要目标是实现这一点:1。我解析xml站点地图并查找每个链接。2.解析内容,并存储在文件中。3.我需要检查我是否已经解析了这个url-跳过,然后转到下一个url。这对包含524000行(甚至1.3B行)的csv文件有效吗?这需要有足够RAM的大型机器来保存这么多的数据。@SwapnilB.-您需要尝试一下,或者尝试一些更小的东西,并确定内存需求。如果搜索列表或搜索空间太大而无法放入内存,还有其他方法可以解决这个问题。这值得再发一篇文章,但这就是我处理大型处理的方式。执行延迟读取,处理每一行(并丢弃它),将处理后的数据存储在pickle文件中。最后,编写分布式(可能使用dispy)作业来处理pickle文件。这将以低成本将基于内存的分布式处理转换为基于文件的分布式处理。@SwapnilB。。。IIRC这里有很多关于处理大型(csv)文件的问答。这对524000行(甚至1.3B行)的csv文件有效吗?这需要有足够RAM的大型机器来保存这么多的数据。@SwapnilB.-您需要尝试一下,或者尝试一些更小的东西,并确定内存需求。如果搜索列表或搜索空间太大而无法放入内存,还有其他方法可以解决这个问题。这值得再发一篇文章,但这就是我处理大型处理的方式。执行延迟读取,处理每一行(并丢弃它),将处理后的数据存储在pickle文件中。最后,编写分布式(可能使用dispy)作业来处理pickle文件。这将以低成本将基于内存的分布式处理转换为基于文件的分布式处理。@SwapnilB。。。IIRC这里有许多关于处理大型(csv)文件的问答。