在Python中,list是全局对象,所以在函数中创建的list也可以return。
读写csv文档,对字符串等进行处理时经常需要放入list/别的如set去重,
处理也用循环的场合要注意生成list的位置,写在别的地方太远了不方便阅读,但又不能写在最里层的循环,否则每次迭代都重新绑定空列表等于无用功。
在多重循环中间创建对象做什么?
需要统计内层循环,同时需要在外层循环每次迭代时重新绑定空对象时使用
import csv
import jieba
with open('D:\sql.csv', 'r', encoding='gb18030') as file:
f = csv.reader(file)
for line in f:
text = jieba.lcut(line[2]) #此处csv文件第3列才是文本
luca=[]
for i in text:
id, text = line
for row in text.split('。'):
if '路卡' in row:
textdata += (row + '。')
luca.append((id, textdata))
写入csv(多行、多列)的代码
import csv
#csv含中文用utf-8个人测试时会写入乱码
#newline参数设为空避免写入一行后空一行再写入的问题
with open(file, t, newline = '', encoding = 'gb18030') as f:
w = csv.writer(f)
for line in atuple:
id, text = line
textdata = ''
for row in text.split('。'):
if '路卡' in row:
textdata += (row + '。')
alldata.append((id, textdata))
w.writerows(alldata)#writerows()一并写入多行,若writerow()写入1行需要缩进到上层循环
吐槽一下,phpadmin中的sql对某列的值判是否为空是用<>''而不是not null...
个人不喜欢用<>表示不等于,毕竟从C++过来的习惯!=
就Python而言两种写法都可以,sql好像也是这样。
sql不区分大小写,但Python等区分。
select * from tableName where columnName like '%luca%'
可以识别luca,LUCA,Luca,LUca,...
而Python等
if 'luca' in text or 'Luca' in text or ...
就性能而言,此处text最好不要是list,例如:
lucalist = ['luca', 'Luca', 'LUCA', ......]
print('LUca' in lucalist)
和
print('LUca' in set(lucalist))
性能差别前者list是遍历查找,虽然没写实际上还是for循环,复杂度是O(n)
而set()中查找是O(1)