Amgod Blog 2023-01-17T05:58:07+00:00 amgod20@qq.com python 如何在一个函数里通过传参数调用其他函数 2015-09-08T21:21:00+00:00 Amgod https://blog.amgod.net/python_function   Python中函数参数的传递是通过“赋值”来传递的。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的Z题。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。函数参数的定义有四种形式:

  1. F(arg1,arg2,…)
  2. F(arg2=,arg3=...)
  3. F(*arg1)
  4. F(**arg1)

  第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位,形参与实参之间是一一对应的关系,即“形参1=实参1 形参2=实参2…”。很明显这是一种非常不灵活的形式。比如:”def addOn(x,y): return x + y”,这里定义的函数addOn,可以用addOn(1,2)的形式调用,意味着形参x将取值1,主将取值2。addOn(1,2,3)和addOn (1)都是错误的形式。
  第2种方式比第1种方式,在定义的时候已经给各个形参定义了默认值。因此,在调用这种函数时,如果没有给对应的形式参数传递实参,那么这个形参就将使用默认值。比如:“def addOn(x=3,y=5): return x + y”,那么addOn(6,5)的调用形式表示形参x取值6,y取值5。此外,addOn(7)这个形式也是可以的,表示形参x取值7,y取默认值5。这时候会出现一个问题,如果想让x取默认值,用实参给y赋值怎么办?前面两种调用形式明显就不行了,这时就要用到Python中函数调用方法的另一大绝招 ──关健字赋值法。可以用addOn(y=6),这时表示x取默认值3,而y取值6。这种方式通过指定形式参数可以实现可以对形式参数进行“精确攻击”,一个副带的功能是可以不必遵守形式参数的前后顺序,比如:addOn(y=4,x=6),这也是可以的。这种通过形式参数进行定点赋值的方式对于用第1种方式定义的函数也是适用的。   上面两种方式定义的形式参数的个数都是固定的,比如定义函数的时候如果定义了5个形参,那么在调用的时候最多也只能给它传递5个实参。但是在实际编程中并不能总是确定一个函数会有多少个参数。
  第3种方式就是用来应对这种情况的。它以一个加上形参名的方式表示,这个函数实际参数是不一定的,可以是零个,也可以是N个。不管是多少个,在函数内部都被存放在以形参名为标识符的tuple中。比如:   对这个函数的调用addOn() addOn(2) addOn(3,4,5,6)等等都是可以的。   与第3种方式类似,形参名前面加了两个表示,参数在函数内部将被存放在以形式名为标识符的dictionary中。这时候调用函数必须采用key1=value1、key2=value2…的形式。比如:

def addOn(**arg):
    sum = 0
    if len(arg) == 0:
        return 0
    else:
        for x in arg.itervalues():
            sum += x
            return sum

那么对这个函数的调用可以用addOn()或诸如addOn(x=4,y=5,k=6)等的方式调用。 上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式。在定义或调用这种函数时,要遵循以下规则:

  1. arg=必须在arg后
  2. *arg必须在arg=
  3. *arg必须在arg后 在函数调用过程中,形参赋值的过程是这样的: 首先按顺序把“arg”这种形式的实参给对应的形参 第二,把“arg=”这种形式的实参赋值给形式 第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参 第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。 例子:
    def test(x,y=5,*a,**b):
     print(x,y,a,b)
    

    就这么一个简单函数,来看看下面对这个函数调用会产生什么结果:

test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 () {'a':1}
test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出错说y给赋了多个值
test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}

(From 百度知道)

]]>
PyQT使用教程 2015-09-08T20:27:00+00:00 Amgod https://blog.amgod.net/pyqt_tutorial PyQt4 QListWidget 使用教程
listWidget = QListWidget() #实例化一个(item base)的列表
listWidget.addItem(‘dd’) #添加一个项
listWidget.addItems([]) # 从序列中添加子项
listWidget.setDragEnabled(True) #设置拖拉
listWidget.sortItems() #排序
listWidget.selectAll()#全选
listWidget.setSortingEnabled(bool) #设置自动排序
listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) #设置选择模式
选择模式有:ExtendedSelection 按住ctrl多选, SingleSelection 单选 MultiSelection 点击多选 ContiguousSelection 鼠标拖拉多选
listWidget.setCurrentRow(0) #设置当前选择行 默认为-1
listWidget.count() #得到子项总数
listWidget.item(row).text() #得到第row行的内容listWidget.item(row)返回一个item 对象
listWidget.takeItem(row) #返回row行的所在的item对象,可以用在insertItem()中
listWidget.insertItem(2,item) #在第二行插入一项item可谓为一个listviewitem对象或者string
listWidget.setCurrentItem(‘dd’) #设置’dd’为当前项
listWidget.selectedItems() #返回一个包含item对象 的list 对象
修改item 的内容
item.setText(‘dsds’) # 设置item的内容为dsds item为对象,可从listWidget.item(row) takeItem(row) 得到
PyQt4 QAction()使用教程
exit=QtGui.QAction(QtGui.QIcon(‘pix/Moon.bmp’),’Exit’,self) #创建一个action “exti”为title self 为parent
exit.setSeparator(bool)#设置设置该action为分离器 也就是分隔符? 当为true时 QIcon会无效
exit.setShortcut(‘Ctrl+Q’) #设置快捷键
也可以 exit.setShortcut(QKeySequence.New) # QKeySequence 保护标准的快捷按钮 QKeySequence.Paste
exit.setStatusTip(‘Exit Application’) #设置状态栏说明
exit.setToolTip(“exit”) #设置tip
exit.setText(“sdf”) #设置title
exit.setWhatsThis(“string”) #设置what’s this
当checked状态发生改变时,发出toggled(bool) 信号
当点击 触发状态发生变化时,发出triggered(bool)信号
self.connect(exit,QtCore.SIGNAL(‘triggered()’),QtCore.SLOT(‘close()’)) #设置信号、插槽
创建的action 可以使用在 menubar toolbar
fileMenu = QMenuBar().addMenu(tr(“&Exit”));
fileMenu.addAction(exit);
fileToolBar = addToolBar(tr(“Exit”));
fileToolBar.addAction(exit);
self.label_img.setContextMenuPolicy(Qt.ActionsContextMenu) #设置右键菜单,添加action为右键菜单
因为创建一个QAction 需要6行代码左右,如果一个窗口有几个QAction的话 会很繁琐 所以我们可以定义一个方法 这个可以简单点

def createAction(self,text,slot=None,shortcut=None,icon=None,tip=None,checkable=False,signal="triggered()"):
     action=QAction(text,self)
     if icon is not None:
        action.setIcon(QIcon("im.png"))
      if shortcut is not None:
        action.setShortcut(shortcut)
       if tip is not None:
        acton.setToolTip(tip)
        action.setStatusTip(tip)
      if slot is not None:
         self.connect(action,SIGNAL(signal),slot)
      if checkable:
         action.setCheckable(checkable)
return action

PyQt4 QSettings 使用教程
setting=QSettings()
setting.setValue(“lab”,QVariant(50)) #设置一个lab键的值
setting.value(“lab”)
为了使QSettings()起作用 在程序运行段 也就是app=QApplication() 以后加上以下一行 app.setOrganizationName(“ds”)
PyQt4 QDockWidget 使用教程
在pyqt4 中 dock 是一个镶嵌在主窗口而又能拉出来成立一个独立窗口的控件 ,dock是QDockWidget 的对象
dock=QDockWidget(‘title’,self) #实例化一个dock title为标题self为parent 因为QDockWidget不添加到布局管理器中,所以我们需要传一个parent 给他
dock.setObjectName(“dock”) #设置dock的对象名称
dock.setAllowedAreas(Qt.LeftDockWidgetArea |Qt.RightDockWidgetArea) #设置dock只能在左边 或者右边显示
allowedareas 有Qt.LeftDockWidgetArea Qt.RightDockWidgetArea Qt.TopDockWidgetArea Qt.BottomDockWidgetArea Qt.AllDockWidgetAreas
dock.setWidget(QLabel) #添加一个label控件
dock.setFeatures(QDockWidget.NoDockWidgetFeatures) #设置dock是否可以关闭 拉出等
参数还有 QDockWidget.DockWidgetClosable 可以关闭 DockWidgetMovable 可以移动
DockWidgetFloatable #可以独立出来 DockWidgetVerticalTitleBar 垂直显示标题 AllDockWidgetFeatures 除垂直标题以外 以上所有 NoDockWidgetFeatures
self.addDockWidget(Qt.RightDockWidget,dock) 添加dock到主窗口 第一个参数为显示位置
PyQt4 QCheckBox 使用教程
setChecked(bool) #设置是否选择
isChecked() #返回bool
发出toggled(bool)信号
PyQt4 QTableWidget 使用教程
self.table=QTableWidget() #实例化
self.table.setColumnCount(4) #设置列数
self.table.setRowCount(6) #设置行数
self.table.setWhatsThis(“mantou”) ###
self.table.setEditTriggers(QTableWidget.NoEditTriggers) #设置为不能编辑单元格
#set Column tab title
self.table.setHorizontalHeaderLabels(list(range(5,10)))
self.table.setVerticalHeaderLabels([“a”,”d”] ) #设置 行title
self.table.setAlternatingRowColors(bool) #设置交替行颜色

for i in range(0,5):
    for x in range(0,7):
        item=QTableWidgetItem(str(i+x))# 实例一个item对象
        item.setTextAlignment(Qt.AlignLeft |Qt.AlignCenter) #设置对齐方式
        item.setBackgroundColor(Qt.green) #设置背景
        self.table.setItem(x,i,item) #添加Item

PyQt4 QInputDialog 使用教程
string, ok = QInputDialog.getText(self, ‘标题’, ‘说明文字’) # 显示一个标题为标题 说明文字为说明问题的输入对话框!string 为输入的内容 ok 为点击的按钮

if ok and not string.isEmpty(): #如果点击了确定   输入了内容
      pass

PyQt4 QPushButton 使用教程
button = QPushButton(‘’) # 实例化一个text为)的按钮
button.setFocusPolicy() #设置焦点样式 样式有:Qt.NoFocus: 无焦点,Qt.TabFocus:用tab切换焦点,Qt.ClickFocus:点击切换焦点,Qt.StrongFocus:貌似跟click一样 Qt.WheelFocus
button.setCheckable(True) #设置为开关按钮 toggle 就是按下按钮不会弹起
button.isChecked() 返回bool值 只有setCheckable()为true时有效
button.setShortcut(‘Ctrl+F’) #设置快捷方式
PyQt4 QMessageBox() 使用教程
message=QtGui.QMessageBox.question(self,u’提示:’,u’你确认要退出?’,QtGui.QMessageBox.Yes,QtGui.QMessageBox.No,QtGui.QMessageBox.Cancel|QMessageBox::Escape) #弹出对话框 QMessageBox.question ,QMessageBox.warning 为类型

if message ==QtGui.QMessageBox.Yes:
   event.accept()
else:
    event.ignore()       
message=QtGui.QMessageBox.warning(parent,"title",u"message")

PyQt4 QFont QPixmap QIcon 使用教程
font = QFont(“Helvetica”, 36, QFont.Bold) #得到一个font object 参数依次是 字体名,大小 ,其他字体属性
fm = QFontMetrics(font) # 获得font字体输出后占据的矩形大小
fm.height() fm.width() #长宽
icon=QIcon(“sd.png”)
PyQt4 QTextBrowser 使用教程
browser = QTextBrowser() #实例化一个textbrowser
browser.append(‘sdfsdfds’) #追加内容
browser.setOpenLinks(True) #打开文档内部链接 默认为True
browser.setOpenExternalLinks(True) #打开外部链接 默认false 当openlinks设置false时 该选项无效
textbrowser.setSearchPaths([“ldks”,”:/sdfs”]) #设置文档搜索路径 参数为包含目录的List
textbrowser.setSource(“index.html”) #设置文档
dt=textbrowser.documentTitle() #返回文档的标题
self.connect(textbrowser,SIGNAL(“SourceChanged(QUrl)”),self.update) #发出一个SourceChanged(QUrl)信号
textbrowser同时 具有以下插槽: home() :返回主文档, backward() #返回上一文档,forward()前进
browser.setDocumentTitle(‘dsds’) #设置文档标题
PyQt4 QLineEdit 使用方法
QLineEdit #单行输入框
lineedit = QLineEdit()# 实例化一个输入框
lineedit.setText(‘abc’) #设置’abc’给 lineedit
lineedit.toPlainText() #获得lineedit的值
lineedit =setReadOnly(True) #设置为只读
lineedit.setDragEnabled(True) #设置能接受拖放
lineedit.setMaxLength(5) #设置最大长度
lineedit.selectAll() #全选
lineedit.setFocus() #得到焦点
lineedit.setInputMask(“dx”) #设置修饰 该输入框必须输入两个字符
punctuationRe = QRegExp(r”[ ,;:.]”) #得到一个regexp对象 可用下面的验证
lineedit.setValidator(QRegExpValidator(QRegExp(r”[0-9]+”)),self) #设置验证 检验用户输入内容
lineedit.emit(SIGNAL(‘textChanged(QString)’)) 发出 信号 (设置为只读时貌似发不出 没有具体测试)
lineedit.emit(SIGNAL(textEdited(QString)’)) 发出 信号 如果设置了验证 该信号在通过验证才能发出 (设置为只读时貌似发不出 没有具体测试)
QTextEdit #多行输入框
textedit=QTextEdit()
textedit.setText(data)
textedit.append(data)
textedit.toPlainText()
PyQt4 QDial QSpinbox 使用方法
dial = QDial() #实例化一个dial
dial.setNotchesVisible(True) #设置边缘
dial.emit(‘SIGNAL(valueChanged(int))’) #发出信号
具有 SLOT(“setValue(int)”) 的插槽
spin=QSpinBox() #实例化
spinbox.setSingleStep(2) #设置步长 ( QDial 有)
spinbox.setRange(1,50)#范围
spinbox.setMaximum(10) #设置最大值 ( QDial 有)
spinbox.setMinimum(5) 设置最小值 ( QDial 有)
spinbox.setValue(6) 设置当前值 ( QDial 有)
print spinbox.value() 得到当前值 ( QDial 有)
PyQt4 QComboBox QDoubleSpinBox 使用方法
fromComboBox = QComboBox() #添加一个 combobox
fromComboBox.addItem(rates) #添加一个下拉选项
fromComboBox.addItems([“%d years” % x for x in range(2, 26)]) #从序列中添加
fromComboBox.setMaxVisibleItems(10) #设置最大显示下列项 超过要使用滚动条拖拉
fromComboBox.setMaxCount(5) #设置最大下拉项 超过将不显示
fromComboBox.setInsertPolicy(QComboBox.InsertAfterCurrent) #设置插入方式
插入方式有:NoInsert,InsertAtTop,InsertAtCurrent,InsertAtBottom,InsertAfterCurrent
InsertBeforeCurrent,InsertAlphabetically #字面意思都好理解 最后一个是按字母表顺序插入
QComboBox 发出一个currentIndexChanged(int) 的信号.
QComboBox 得到当前项 currentIndex() + 1 #QComboBox 默认的currentIndex为 -1
QComboBox.findText(‘dsfds’) #返回 内容为dsfds的索引
QComboBox 得到当前项文本内容currentText()
fromSpinBox = QDoubleSpinBox()
fromSpinBox.setRange(0.01, 10000000.00)
fromSpinBox.setSuffix(“ %d”) #设置后缀 如显示 10.0%d
fromSpinBox.setPrefix(‘#d’) #设置前缀
fromSpinBox.setValue(1.00) #设置值
QDoubleSpinBox 发出 valueChanged(double) 信号 有setValue(double)插槽
(转摘自http://scm002.iteye.com/blog/1728274)

]]>
设置PYQT中table的行高和列宽 2015-08-01T21:12:00+00:00 Amgod https://blog.amgod.net/pyqttableheight 1、指定某个行或者列的大小
self.MyTable.setColumnWidth(2,50)  #将第2列的单元格,设置成50宽度
self.MyTable.setRowHeight(2,60)   #将第2行的单元格,设置成60的高度

2、将行和列的大小设为与内容相匹配

self.MyTable.resizeColumnsToContents()   #将列调整到跟内容大小相匹配
self.MyTable.resizeRowsToContents()   #将行大小调整到跟内容的大小相匹配

3、设置所有行和列为固定值

self.tableWidget.horizontalHeader().setDefaultSectionSize(80)  #设置所有列宽为80
self.tableWidget.verticalHeader().setDefaultSectionSize(21)   #设置所有行高为21
]]>
Windows下安装pip包报错Unable to find vcvarsall.bat的解决办法 2015-01-25T21:17:00+00:00 Amgod https://blog.amgod.net/pip   刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装py2exe 0.6.10a的时候就报错。 在Windows7 x32下使用pip安装包的时候提示报错:Unable to find vcvarsall.bat
环境: windows7 x32 ,python2.7.9
原因: windows下使用pip安装包的时候需要机器装有vs2008,VS2010和VS2012还不行,如果不想装VS2008的话,可以安装一个Micorsoft Visual C++ Compiler for Python 2.7的包,下载地址如下:
http://www.microsoft.com/en-us/download/details.aspx?id=44266

安装步骤:

  1. 用Universal Extractor解压VCForPython27到目标目录如:D:\VCForPython27
  2. 环境变量--系统变量--变量Path添加:D:\VCForPython27\Microsoft\Visual C++ for Python\9.0\VC\bin
  3. 导入注册表:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\setup]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\setup\VC]
"ProductDir"="D:\\VCForPython27\\Microsoft\\Visual C++ for Python\\9.0\\"

安装ok

]]>
2014 gone,2015 come 2014-12-31T17:36:00+00:00 Amgod https://blog.amgod.net/2014 gone 2014的最后一天,下了一场雪。

]]>
设置python的默认编码为utf8 2014-12-31T11:04:00+00:00 Amgod https://blog.amgod.net/python-utf8 重装系统,在安装完成Eric6后编译PYQT的ui文件是总是提示:

<type 'exceptions.UnicodeDecodeError'>: 
'ascii' codec can't decode byte 0xe6 in position 66: ordinal not in range(128)
--------------------------------------------------------------------------------
  File "D:\Python27\Lib\site-packages\eric5\Project\ProjectFormsBrowser.py", line 692, in __compileUIDone
    f.write(line + "\n")
  File "D:\Python27\Lib\site-packages\eric5\Utilities\compatibility_fixes.py", line 130, in write
    txt = txt.replace('\n', self.__newline)

怀疑是Eric的问题,于是换为Eric5,问题依旧。最终发现是Python的默认编码为ascii,而Pyqt的默认编码为UTF-8,两者不一致造成。之前电脑上的Python已经被我更改了默认编码,所以一直没问题。

更改Python的默认编码为UTF-8:(以下为摘录From http://etosun.com/?post=120) python安装目录:/etc/python2.x/sitecustomize.py

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
try:
    import apport_python_hook
except ImportError:
    pass
else:
    apport_python_hook.install()

如果在windows下: 可以在Python安装目录下的Lib/site-packages目录中,新建一个sitecustomize.py文件(也可以建在其它地方,然后手工导入,建在这里,每次启动Python的时候设置将自动生效),内容如下:

import sys
sys.setdefaultencoding('utf-8') #set default encoding to utf-8

然后可以查看到改变已经生效

>>>import sys
>>>sys.getdefaultencoding()
'utf-8'

此时运行程序,如果仍然报告之前的错误,只需要显示地设定输出的编码

print s.encode('utf-8')   

就可以看到正确显示。

]]>
根据CAID计算chipid 2014-12-05T13:02:00+00:00 Amgod https://blog.amgod.net/caid 直接上代码:

# -*- coding: utf-8 -*-
import os,sys
import time
time_now=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) #取得当前时间
file=os.path.isfile("CAID.txt")#判断文件是否存在
if (file == False):
	fp=open('Error.txt','a')
	fp.write('['+time_now + ']'+' Error: CAID.txt文件不存在!'+'\n')
	fp.close()
	print u'CAID.txt文件不存在!'
else:
	fp0 = open('CAID.txt','r')    #打开目标文件1;     
	fp1=open('ChipID.txt','w')    #创建要写入内容的文件;
	fp1.write('   CAID       ChipID(Hex)  ChipID(Dec)'+'\n')
	n=0
	for lines in fp0:
		CaID=lines.strip('\n') #去掉回车换行符
		n=n+1
		if len(CaID)!=11:
			fp=open('Error.txt','a')
			fp.write('['+time_now + ']'+' Error: 请检查第' +str(n)+ '行CAID长度是否正确!'+'\n')
			fp.close()
			print u'请检查第' + str(n) + u'行CAID长度是否正确!'
			break    #中断执行
		else:
			if CaID.isdigit():
				CaID_int=int(CaID)       #转换为整数型
				CaID_10=int(CaID_int/10)   #取整,去掉尾数
				if CaID_10>2**31:
					Chipid_int=int(CaID_10-2**31)
				else:
					Chipid_int=int(CaID_10+2**31)  #CAID转换为CHIPid十进制的算法
				Chipid_Dec_str=str(Chipid_int)[0:10]  #截取字符串,去掉最后的L字符
				Chipid_Hex=hex(Chipid_int)     #转换为十六进制
				Chipid_Hex_str=Chipid_Hex[2:10]#截取字符串,去掉前面的0x和后面的L字符
				fp1.write(CaID +'    ' +Chipid_Hex_str  + '    ' + Chipid_Dec_str + '\n')      #将CAID chipid十六进制和十进制写入文件,中间以空格间隔
			else:
				fp=open('Error.txt','a')
				fp.write('['+time_now + ']'+' Error: 请检查第'+ str(n) + '行CAID是否为整数!'+'\n')
				fp.close()
				print u'请检查第'+ str(n) + u'行CAID是否为整数!'
				break
	fp0.close()           #关闭文件
	fp1.close()

Caid2Chipid.py

]]>
python去掉相同内容的行 2014-10-24T17:47:00+00:00 Amgod https://blog.amgod.net/Drop the same line 同一文件中存在相同行的内容,而又不想出现相同行时的处理方式:

lines_seen = set() 
outfile = open("4.txt", "w")
n=0
for line in open("3.txt", "r"):
    if line not in lines_seen: 
        outfile.write(line)
        lines_seen.add(line)
        n=n+1
outfile.close()
print n-1

另一种方法:

#--conding:utf-8--
a=[] #初始化要用到的列表a,用于记录原始行信息
b=[] #初始化要用到的列表b,用于记录结果数据,由两项构成。前一项为行信息如“小明:90”,后一项为该行对应的出现次数如2
f1=file("3.txt", "r") #打开1.txt文件
for line in f1:
    a.append(line) #将1.txt文件每一行作为一个元素,存入列表a
f1.close
 
for n in a: #遍历a中每一项(记为n),即1.txt中每一行
    flag=1
    for i in range(0,len(b)):
        if n == b[i][0]: #n与列表b中的每一项对比,如果有相等的:
            b[i][1]=b[i][1]+1 #那么对应的出现计数加1
            flag=0
            break
    if flag==1: #如果前面的比对没有一个相等的,即该行是第一次出现:
        b.append([n,1]) #那么在列表b中添加改行为新的一项
 
f2=file("5.txt", "w") #打开2.txt文件,用于输出
for n in b: #输出格式为:行信息 (tab) 出现次数 (回车)
    #f2.write(str(n[0][0:-1]) + "\t")
    f2.write(str(n[0][0:-1]) + "\n")
    #f2.write(str(n[1]) + "\n") 
f2.close
print "Finished" #完成
]]>
西班牙VS智利 2014-06-19T00:00:00+00:00 Amgod https://blog.amgod.net/shijiebei 西班牙对智利,2;1,西班牙竟然输了

]]>
文章测试 2014-06-06T00:00:00+00:00 Amgod https://blog.amgod.net/test 你好吗,测试这个系统

Disqus是一家第三方社会化评论系统,主要为网站主提供评论托管服务。Disqus由Danniel Ha于2007年5月5日创办,和Dropbox、Reddit等知名网站一样,是Y Combinator孵化的一家公司。创办至今已获得Y-Combinator、Union Square Ventures、North Bridge等投资机构共计1450万美元投资。 当前有80万家第三方网站在使用Disqus提供的第三方评论系统,其评论系统每月的独立用户访问量已接近5亿,这一数字较2010年增长了500%。包括CNN、NBC、Fox News、Engadget、Time等知名网站均使用了Disqus提供的社会化评论系统。WordPress、Blogger、Tumblr等第三方博客平台均提供了Disqus第三方评论插件,目前,第三方社会化评论系统在美国,基本是主流网站的标配。

]]>