可能重复:
Python列表中的意外功能
所以我对Python比较新,我在使用2D列表时遇到了麻烦.
这是我的代码:
data = [[None]*5]*5
data[0][0] = 'Cell A1'
print data
Run Code Online (Sandbox Code Playgroud)
这是输出(为便于阅读而格式化):
[['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None],
['Cell A1', None, None, None, None]]
Run Code Online (Sandbox Code Playgroud)
为什么每一行都被分配了值?
以下是我的模型设置的片段:
class Profile(models.Model):
name = models.CharField(max_length=32)
accout = models.ManyToManyField(
'project.Account',
through='project.ProfileAccount'
)
def __unicode__(self)
return self.name
class Accounts(models.Model):
name = models.CharField(max_length=32)
type = models.CharField(max_length=32)
class Meta:
ordering = ('name',)
def __unicode__(self)
return self.name
class ProfileAccounts(models.Model):
profile = models.ForeignKey('project.Profile')
account = models.ForeignKey('project.Accounts')
number = models.PositiveIntegerField()
class Meta:
ordering = ('number',)
Run Code Online (Sandbox Code Playgroud)
然后,当我访问帐户时,如何在中间ProfileAccounts模型中按"数字"排序,而不是在帐户模型中使用默认的"名称"?
for acct_number in self.profile.accounts.all():
pass
Run Code Online (Sandbox Code Playgroud)
这不起作用,但是我希望它如何访问这些数据的要点:
for scanline_field in self.scanline_profile.fields.all().order_by('number'):
pass
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用xlrd读取Excel文件,我想知道是否有办法忽略Excel文件中使用的单元格格式,并只是将所有数据导入为文本?
这是我正在使用的代码:
import xlrd
xls_file = 'xltest.xls'
xls_workbook = xlrd.open_workbook(xls_file)
xls_sheet = xls_workbook.sheet_by_index(0)
raw_data = [['']*xls_sheet.ncols for _ in range(xls_sheet.nrows)]
raw_str = ''
feild_delim = ','
text_delim = '"'
for rnum in range(xls_sheet.nrows):
for cnum in range(xls_sheet.ncols):
raw_data[rnum][cnum] = str(xls_sheet.cell(rnum,cnum).value)
for rnum in range(len(raw_data)):
for cnum in range(len(raw_data[rnum])):
if (cnum == len(raw_data[rnum]) - 1):
feild_delim = '\n'
else:
feild_delim = ','
raw_str += text_delim + raw_data[rnum][cnum] + text_delim + feild_delim
final_csv = open('FINAL.csv', 'w')
final_csv.write(raw_str)
final_csv.close()
Run Code Online (Sandbox Code Playgroud)
此代码是有效的,但是某些字段(例如邮政编码)作为数字导入,因此它们具有十进制零后缀.例如,Excel文件中是否有"79854"的邮政编码,它将导入为"79854.0".
我试过在这个xlrd规范中找到一个解决方案,但是没有成功.
所以我有一个StringIO()类似文件的对象,我正在尝试将其写入a ZipFile(),但是我得到了这个TypeError:
coercing to Unicode: need string or buffer, cStringIO.StringI found
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的代码示例:
file_like = StringIO()
archive = zipfile.ZipFile(file_like, 'w', zipfile.ZIP_DEFLATED)
# my_file is a StringIO object returned by a remote file storage server.
archive.write(my_file)
Run Code Online (Sandbox Code Playgroud)
文档说这StringIO()是一个类文件类,ZipFile()可以接受类文件对象.有什么我想念的吗?任何帮助将不胜感激.
提前致谢!
因为我已经用C#做过任何游戏编程已经有一段时间了,但我最近有一个错误要回到它,我想要一些关于我应该使用什么配置的意见.
我想使用C#,因为这是我用于工作的东西,并且变得熟悉.我过去曾使用DirectX和OpenGL,但主要是使用3D,但现在我有兴趣编写一个带有所有矢量图形的2D游戏,类似于几何战争或旧星球大战街机游戏的外观.
我感兴趣的要点:
•易于使用/实施.
•易于记忆.(我计划一次进行很多事情)
•看起来不错,我不希望曲线看起来像素化.
•也许一些很好的效果,如发光或粒子.
我对所有建议持开放态度,甚至可能是我没有想过的东西......
提前致谢!
我不太确定说出这个的最佳方式,但我想做的是读取pdf文件,进行各种修改,并将修改后的pdf保存在原始文件上.截至目前,我能够将修改后的pdf保存到单独的文件中,但我希望替换原始文件,而不是创建新文件.
这是我目前的代码:
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input = PdfFileReader(file('input.pdf', 'rb'))
blank = PdfFileReader(file('C:\\BLANK.pdf', 'rb'))
# Copy the input pdf to the output.
for page in range(int(input.getNumPages())):
output.addPage(input.getPage(page))
# Add a blank page if needed.
if (input.getNumPages() % 2 != 0):
output.addPage(blank.getPage(0))
# Write the output to pdf.
outputStream = file('input.pdf', 'wb')
output.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)
如果我更改outputStream为不同的文件名,它工作正常,我只是不能保存输入文件,因为它仍在使用.我试过.close()了流,但它也给了我错误.
我觉得这有一个相当简单的解决方案,我没有找到任何运气.
谢谢!