GVKun编程网logo

如何从 Python 列表中创建逗号分隔的字符串?(python列表以逗号做分隔符排序)

3

关于如何从Python列表中创建逗号分隔的字符串?和python列表以逗号做分隔符排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CMake不断从cygwinpython中获取Pyth

关于如何从 Python 列表中创建逗号分隔的字符串?python列表以逗号做分隔符排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取、Python 3 - 如何从 SQL 数据库中提取数据并处理数据并逐行附加到 Pandas 数据帧?、Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数、python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

如何从 Python 列表中创建逗号分隔的字符串?(python列表以逗号做分隔符排序)

如何从 Python 列表中创建逗号分隔的字符串?(python列表以逗号做分隔符排序)

如何解决如何从 Python 列表中创建逗号分隔的字符串?

我想从 python 的列表中标记 MysqL 中未使用的数据集。如何在 python 中创建一个列表来为 MysqL 查询提供服务?

这是我的方法:

以下python列表包含urls

  1. item[''media_urls''] = [
  2. {''type'': ''image'',''url'': ''p1.jpg''},{''type'': ''image'',''url'': ''p2.jpg''}
  3. ]

创建可用网址数组。这段代码不起作用,因为我认为 var 需要在开始时初始化,然后逗号不应该在最后一个值之后:

  1. for media_url in item[''media_urls'']:
  2. found_media += media_url[''url''].'',''

我也试过:

  1. found_media = '',''.join(media_url[''url''])
  2. # results in: TypeError: list indices must be integers or slices,not str

更新表并将所有不在 found_media 中的 url 设置为“禁用”:

  1. # pseudo code,I just need the query
  2. $sql = "
  3. UPDATE tbl
  4. SET status = ''disabled''
  5. WHERE URL NOT IN ($found_media)
  6. "

非常感谢您对此的任何帮助。

解决方法

您确实应该使用带有 URL 值参数的准备好的查询来防止 SQL 注入。使用列表推导式查找所有 found_media 值,然后使用 join 生成查询的参数列表,最后执行查询:

  1. item = {''media_urls'': [
  2. {''type'': ''image'',''url'': ''p1.jpg''},{''type'': ''image'',''url'': ''p2.jpg''}
  3. ]}
  4. found_media = [m[''url''] for m in item[''media_urls'']]
  5. params = '',''.join([''%s''] * len(found_media))
  6. sql = f''''''
  7. UPDATE tbl
  8. SET status = ''disabled''
  9. WHERE URL NOT IN ({params})
  10. ''''''
  11. cursor.execute(sql,tuple(found_media))
,

是的,如您所见,需要针对第一种情况初始化对象,并且最后还会有额外的 ,

  1. found_media = ""
  2. for media_url in item[''media_urls'']:
  3. found_media += media_url[''url''] + '',''

您可以将列表理解与 join() 结合使用:

  1. found_media = '',''.join([f"''{elt[''url'']}''" for elt in item[''media_urls'']])
,

定义项目。使用 map 提取每个 url,引用,然后将该数组转换为带有连接的逗号分隔字符串:

  1. item = {
  2. ''media_urls'': [
  3. {''type'': ''image'',''url'': ''p2.jpg''}
  4. ]
  5. }
  6. found_media = '',''.join(map(lambda u: "''%s''" % u[''url''],item[''media_urls'']))
  7. print(found_media)

将打印:

  1. ''p1.jpg'',''p2.jpg''

CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

如何解决CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

我有一个看起来像这样的 CMake 脚本:

  1. find_program(PYTHON_COMMAND NAMES python3 python)

问题是它检测到安装在 Cygwin 安装中的 python。 输出总是:

  1. -- PYTHON_PATH:C:/cygwin64/bin/python3

我希望它取自:

  1. c:\\python36-64\\python

在windows PATH变量中,Cygwin bin在路径的最后一个,windows安装在第一个 但它只检测到 Cygwin python,
怎么改?

Python 3 - 如何从 SQL 数据库中提取数据并处理数据并逐行附加到 Pandas 数据帧?

Python 3 - 如何从 SQL 数据库中提取数据并处理数据并逐行附加到 Pandas 数据帧?

如何解决Python 3 - 如何从 SQL 数据库中提取数据并处理数据并逐行附加到 Pandas 数据帧??

我有一个 MysqL 数据库,它的列是:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int unsigned | NO   | PRI | NULL    | auto_increment |
| artist       | text         | YES  |     | NULL    |                |
| title        | text         | YES  |     | NULL    |                |
| album        | text         | YES  |     | NULL    |                |
| duration     | text         | YES  |     | NULL    |                |
| artistlink   | text         | YES  |     | NULL    |                |
| songlink     | text         | YES  |     | NULL    |                |
| albumlink    | text         | YES  |     | NULL    |                |
| instrumental | tinyint(1)   | NO   |     | 0       |                |
| downloaded   | tinyint(1)   | NO   |     | 0       |                |
| filepath     | text         | YES  |     | NULL    |                |
| language     | json         | YES  |     | NULL    |                |
| genre        | json         | YES  |     | NULL    |                |
| style        | json         | YES  |     | NULL    |                |
| artistgender | text         | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

我需要从中提取数据并处理数据并将数据添加到 Pandas DataFrame。

我知道如何从 sql 数据库中提取数据,并且我已经实现了一种将数据传递给 DataFrame 的方法,但是它非常慢(大约 30 秒),而当我使用命名元组的平面列表时,操作是速度极快(不到 3 秒)。

具体来说,除非下载文件(当前没有下载任何歌曲),否则文件路径默认为 NULL,当 Python 获取文件路径时,该值将为 None,我需要该值变为 ''''

而且由于 MysqL 没有 BOOLEAN 类型,我需要将接收到的 int 转换为 bool

语言、流派、样式字段是存储为 JSON 列表的标签,它们当前都是 NULL,当 Python 获取它们时,它们是字符串,我需要使用 list 使它们成为 json.loads除非它们是 None,如果它们是 None 我需要附加空列表。

这是我对问题的低效解决方案:

import json
import MysqL.connector
from pandas import *

fields = {
    "artist": str(),"album": str(),"title": str(),"id": int(),"duration": str(),"instrumental": bool(),"downloaded": bool(),"filepath": str(),"language": list(),"genre": list(),"style": list(),"artistgender": str(),"artistlink": str(),"albumlink": str(),"songlink": str(),}

conn = MysqL.connector.connect(
    user="Estranger",password=PWD,host="127.0.0.1",port=3306,database="Music"
)
cursor = conn.cursor()

def proper(x):
    return x[0].upper() + x[1:]

def fetchdata():
    cursor.execute("select {} from songs".format('',''.join(list(fields))))
    data = cursor.fetchall()
    dataframes = list()
    for item in data:
        entry = list(map(proper,item[0:3]))
        entry += [item[3]]
        for j in range(4,7):
            cell = item[j]
            if isinstance(cell,int):
                entry.append(bool(cell))
            elif isinstance(cell,str):
                entry.append(cell)
        if item[7] is not None:
            entry.append(item[7])
        else:
            entry.append('''')
        for j in range(8,11):
            entry.append(json.loads(item[j])) if item[j] is not None else entry.append([])
        entry.append(item[11])
        entry += item[12:15]
        df = DataFrame(fields,index=[])
        row = Series(entry,index = df.columns)
        df = df.append(row,ignore_index=True)
        dataframes.append(df)
    songs = concat(dataframes,axis=0,ignore_index=True)
    songs.sort_values([''artist'',''album'',''title''],inplace=True)
    return songs

目前数据库中有4464首歌曲,代码大约需要30秒才能完成。

我按艺术家和标题对我的 sql 数据库进行排序,我需要按艺术家、专辑和标题对 QTreeWidget 的条目进行排序,而 MysqL 对数据的排序与 Python 不同,我更喜欢 Python 排序。

在我的测试中,df.locdf = df.append() 方法很慢,pd.concat 很快,但我真的不知道如何创建只有一行的数据帧并将平面列表传递给数据帧而不是字典,如果有比 pd.concat 更快的方法,或者如果 for 循环中的操作可以矢量化。

如何改进我的代码?


我想出了如何创建一个带有列表列表的 DataFrame 并指定列名,它的速度非常快,但我仍然不知道如何优雅地指定数据类型而不会抛出错误...

def fetchdata():                                                                          
    cursor.execute("select {} from songs".format('',''.join(list(fields))))                
    data = cursor.fetchall()                                                              
    for i,item in enumerate(data):                                                       
        entry = list(map(proper,item[0:3]))                                              
        entry += [item[3]]                                                                
        for j in range(4,7):                                                             
            cell = item[j]                                                                
            if isinstance(cell,int):                                                     
                entry.append(bool(cell))                                                  
            elif isinstance(cell,str):                                                   
                entry.append(cell)                                                        
        if item[7] is not None:                                                           
            entry.append(item[7])                                                         
        else:                                                                             
            entry.append('''')                                                              
        for j in range(8,11):                                                            
            entry.append(json.loads(item[j])) if item[j] is not None else entry.append([])
        entry.append(item[11])                                                            
        entry += item[12:15]                                                              
        data[i] = entry                                                                   
    songs = DataFrame(data,columns=list(fields),index=range(len(data)))               
    songs.sort_values([''artist'',inplace=True)                         
    return songs

而且我仍然需要类型转换,它们已经相当快了,但它们看起来并不优雅。

解决方法

您可以为每一列创建一个转换函数:

funcs = [
    str.capitalize,str.capitalize,int,str,bool,lambda v: v if v is not None else '''',lambda v: json.loads(v) if v is not None else [],]

现在您可以应用转换每个字段值的函数

for i,item in enumerate(data):
    row = [func(field) for field,func in zip(item,funcs)]
    data[i] = row

Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数

Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数

描述

setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。

语法

setattr 语法:

setattr(object, name, value)

参数

  • object -- 对象。
  • name -- 字符串,对象属性。
  • value -- 属性值。

返回值

无。

实例

以下实例展示了 setattr 的使用方法:

>>>class A(object): ... bar = 1 ... >>> a = A() >>> getattr(a, ''bar'') # 获取属性 bar 值 1 >>> setattr(a, ''bar'', 5) # 设置属性 bar 值 >>> a.bar 5
 
 
super()函数

描述

super() 函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

语法

以下是 super() 方法的语法:

super(type[, object-or-type])

参数

  • type -- 类。
  • object-or-type -- 类,一般是 self

Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

Python3.x 实例:

class A:
    pass class B(A): def add(self, x): super().add(x)

Python2.x 实例:

class A(object): # Python2.x 记得继承 object pass class B(A): def add(self, x): super(B, self).add(x)

返回值

无。


实例

以下展示了使用 super 函数的实例:

#!/usr/bin/python # -*- coding: UTF-8 -*- class FooParent(object): def __init__(self): self.parent = ''I\''m the parent.'' print (''Parent'') def bar(self,message): print ("%s from Parent" % message) class FooChild(FooParent): def __init__(self): # super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象 super(FooChild,self).__init__() print (''Child'') def bar(self,message): super(FooChild, self).bar(message) print (''Child bar fuction'') print (self.parent) if __name__ == ''__main__'': fooChild = FooChild() fooChild.bar(''HelloWorld'')

执行结果:

Parent
Child
HelloWorld from Parent Child bar fuction I''m the parent.

python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode

python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode

python 编码转换
这个 2.6 就是用来向 3k 过渡的,我还是期待 py3k,wxwidget3 也在开发当中,两者的主要改变不约而同的都集中在 unicode 问题上,
现在用 py2.5+wxpy2.8
配合做软件,感觉最不方便的就是编码问题,用 iewin 的 LoadString 输出中文就是搞不定,这个列表中以前也有人问过这问题,可惜没有解决方案。
期待将来的 py3k+wxpy3 能一劳永逸的解决编码问题。
 
我的解决方案,LoadString 支持中文
 汉字转为 html 实体字符得了。
 echo mb_convert_encoding ("重玩一次", "HTML-ENTITIES", "gb2312");
 
编码转换
s = "中文"
s1 = u"中文"
 
unicode -> gbk
 s1.encode("gbk")
unicode -> utf-8
 s1.encode("UTF-8")
gbk ->unicode
 unicode(s, "gbk")
 或者
 s.decode("gbk")
 

关于如何从 Python 列表中创建逗号分隔的字符串?python列表以逗号做分隔符排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取、Python 3 - 如何从 SQL 数据库中提取数据并处理数据并逐行附加到 Pandas 数据帧?、Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数、python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode等相关知识的信息别忘了在本站进行查找喔。

本文标签: