如何使用python将唯一值写入csv

2024-09-28 22:34:35 发布

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

我正在尝试将唯一值写入一个csv,该csv中已经有一个int列表。你知道吗

目前我已经尝试通过一系列可能的数字循环,然后检查这些数字是否在csv中。看来检查工作不正常。你知道吗

def generateUserCode():
    with open ('/MyLocation/user_codes.csv') as csvDataFile:
        userCodes = csv.reader(csvDataFile)
        for x in range(0, 201):
            if x not in userCodes:
                return x

def writeUserCode(userCode):        
    with open ('/MyLocation/user_codes.csv', 'a') as csvDataFile:
        csvDataFile.write('\n' + str(userCode))

userCode = generateUserCode()
writeUserCode(userCode)   

因此,它应该打印第一个不在csv中的数字,并将该数字添加到csv中。不过,它所做的只是打印0,并在每次运行时将0添加到我的csv中,即使0在csv中也是如此。你知道吗

更新:

csv如下所示:

3
4
5
35
56
100

有更多的值,但通常是相同的,没有重复,值在0到200之间


Tags: csvindefaswith数字opencodes
3条回答

以下行有问题:

if x not in userCodes:

userCodes不是列表,而是csvReader对象。另外,你应该使用

if str(x) not in line:
#use str(x) instead of x

这是对我有效的代码:

import csv
def generateUserCode():
    with open ('file.csv') as csvDataFile:
        csvread = csv.reader(csvDataFile)
        userCodes = []
        #print(userCodes)
        for line in csvread:
            try:
                userCodes.append(line[0]) # As long as the code is the first  
                                          # element in that line, it should work
            except:
                IndexError # Avoid blank lines
        print(userCodes)
        for x in range(0, 201):
            if str(x) not in userCodes:
                return x

def writeUserCode(userCode):
    with open ('file.csv', 'a') as csvDataFile:
        csvDataFile.write('\n' + str(userCode))

userCode = generateUserCode()
writeUserCode(userCode)

迭代用户代码显示每个项都是字符串列表:

 for x in userCodes:
     print(x)

退货:

 ['3']
 ['4']
 ['5']
 ['35']
 ['56']
 ['100']

所以有很多可能的解决方法,其中之一是:

def generateUserCode():
    with open ('/MyLocation/user_codes.csv') as csvDataFile:
        userCodes = csv.reader(csvDataFile)
        userCodes = [int(item[0]) for item in userCodes]
        for x in range(0, 201):
            if x not in userCodes:
                return x

在没有看到CSV的情况下回答是很棘手的,但是当你读取CSV时,所有的字段都是字符串。因此,您需要将userCodes转换为intx转换为string才能进行比较。你知道吗

例如:

userCodes = [int(d[0]) for d in csv.reader(csvDataFile)]
for x in range(0, 201):
    if x not in userCodes:
        return x

相关问题 更多 >