Python 读取CSV文件并使用数据与pygame对话

Python 读取CSV文件并使用数据与pygame对话,python,csv,Python,Csv,今天似乎每件事都有很多问题,第一次问问题,我甚至不能正确地在这里输入代码 基本上,我希望做的是从csv文件导入数据,并使用它来选择和显示使用pygame的图像,例如 screen.blit(row[0],(0,0)) 其中,行[0]是csv文件中的Rat1,在我的代码中定义为: Rat1 = pygame.image.load('Rat1.jpg').convert() 然而,这引发了“论点1必须是pygame.Surface,而不是str”,这很公平,但我真的很难找到解决办法,并且发现了一

今天似乎每件事都有很多问题,第一次问问题,我甚至不能正确地在这里输入代码

基本上,我希望做的是从csv文件导入数据,并使用它来选择和显示使用pygame的图像,例如

screen.blit(row[0],(0,0))
其中,行[0]是csv文件中的Rat1,在我的代码中定义为:

Rat1 = pygame.image.load('Rat1.jpg').convert()
然而,这引发了“论点1必须是pygame.Surface,而不是str”,这很公平,但我真的很难找到解决办法,并且发现了一些相当奇怪的事情,至少对我来说很奇怪

我是新手,所以我能想到的解决这个问题的最佳方法是将csv文件中的行[0]更改为1,然后将其导入到我的程序中,并从中创建一个整数变量,例如

x = row[0]
int(x)                     
if x == 1:
    x = Rat1
然后将x插入pygame,例如

screen.blit(x,(0,0))
如果我把x=Rat1作为一个全局变量,这是可行的,但是如上所述并不会将x改为=1,而是保持为行[x],所以它不喜欢它

这可以归结为当我尝试测试它时发生的事情

import csv

out = open("CSVTest.csv","rb")
data = csv.reader(out)
data = [row for row in data]
out.close()

print row[0]    #this causes it to print a 1, so I know
                #it's working and reading as it should

x = row[0]      #make a variable

int(x)          #doesn't throw up an error, so I assume it
                #has changed the csv string to an integer

print x         #prints a 1 again

if x == 1:
print "hello?"      #doesn't print, so clearly doesn't
                    #recognise x as an integer

if x == 49:         #I'm getting desperate now, ASCII 1?!
print "hello?!"     #No joy
所以它到底是什么,它似乎不是你的标准字符串,因为它显然不会转换成整数

我尝试了pygame.image.fromstring(),答案可能就在这里,但我无法让它工作

有谁能指出这一切有什么问题,以及我如何能够轻松地从csv文件调用数据,并至少将其识别为整数或更好,插入到pygame代码中并显示出来

我从csv文件和pygame显示的图像中读到了一些东西,但要让这两个角色配合起来似乎很困难,当然我无法理解

非常感谢您的帮助

是Python标准内置函数,用于将字符串转换为整数值。使用包含数字的字符串作为参数调用它,它返回转换为实际整数的数字:

print int("1") + 1
上面打印的是
2

如果您知道列表的结构(它只包含列表,只有一个级别),您可以这样做:

T2 = [map(int, x) for x in T1]
或…

试试这个

x = "1"
x是一个字符串,因为它周围有引号,但里面有一个数字

x = int(x)
因为x中有数字1,所以我可以把它转换成整数

要查看字符串是否是数字,可以执行以下操作

def is_number(var):
    try:
        if var == int(var):
            return True
    except Exception:
        return False

x = "1"

y = "test"

x_test = is_number(x)

print(x_test)
它应该打印为IDLE True,因为x是一个数字

y_test = is_number(y)

print(y_test)

它应该打印为IDLE False,因为y不是一个数字。

非常感谢您的回复,我不太理解T2=[map(int,x)for x in T1]部分,因此我以后将不得不更慢地完成所有内容。让我吃惊的是,它一直在说它是一个从csv读取的字符串,它应该是。。。“1”我可以这样打印,但它不允许我把它转换成整数,这看起来很奇怪,它是另一种奇怪的格式?
y_test = is_number(y)

print(y_test)