小编Gra*_*ing的帖子

为什么 f'{{{74}}}' 与 f'{{74}}' 与 f-Strings 相同?

f-Strings在 Python 3.6 中可用,对于格式化字符串非常有用:

>>> n='you'
>>> f'hello {n}, how are you?'
'hello you, how are you?'
Run Code Online (Sandbox Code Playgroud)

Python 3 的 f-Strings: An Improvement String Formatting Syntax (Guide) 中阅读更多关于它们的信息。我发现了一个有趣的模式:

请注意,使用三个大括号将导致您的字符串中只有一个大括号:

>>> f"{{{74}}}"
'{74}'
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用三个以上的大括号,您可以获得更多的大括号来显示:

>>> f"{{{{74}}}}"
'{{74}}'
Run Code Online (Sandbox Code Playgroud)

情况正是如此:

>>> f'{74}'
'74'

>>> f'{{74}}'
'{74}'
Run Code Online (Sandbox Code Playgroud)

现在如果我们从二{传到三,结果是一样的:

>>> f'{{{74}}}'
'{74}'           # same as f'{{74}}' !
Run Code Online (Sandbox Code Playgroud)

所以我们最多需要4个!( {{{{) 得到两个大括号作为输出:

>>> f'{{{{74}}}}'
'{{74}}'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?从那一刻起,用两个大括号让 Python 需要一个额外的大括号会发生什么?

python string formatting python-3.x f-string

111
推荐指数
1
解决办法
4089
查看次数

结合 f 字符串和原始字符串文字

我想知道如何在使用 f-string 的同时r获取原始字符串文字。我目前有它如下但想要允许任何名称替换的选项Alex我正在考虑添加一个 f 字符串,然后用Alex花括号替换并将用户名放在里面,但这不适用于r.

username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'
Run Code Online (Sandbox Code Playgroud)

python python-3.x f-string

44
推荐指数
3
解决办法
2万
查看次数

python显示\ n而不是换行

我编写了一个函数来创建VALUESSQL查询的一部分:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      ),
Run Code Online (Sandbox Code Playgroud)

当我调用此函数和print结果时,得到的是:

query_values:
('\n("801",\n"printer",\n"barcode printer")\n,\n\n("844",\n"laptop",\n"windows")\n,\n\n("997",\n"printer",\n"barcode printer")\n',)
Run Code Online (Sandbox Code Playgroud)

合而为一。而不是换行,\n而是显示。

本来我有一个\n,但是后来我插入了多个,只是看它们是否会显示出来。

第二个问题是整个内容中都有括号,这是我不想要的。

我对这两个问题感到困惑,我想出了第二个问题的解决方案:

函数结尾处有一个逗号。逗号导致函数返回一个元组,而不是单个字符串。

我删除了逗号:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      )
Run Code Online (Sandbox Code Playgroud)

并且解决了两个问题。现在的输出是:

query_values:

("801",
"printer",
"barcode printer")
,

("844",
"laptop",
"windows")
,

("997",
"printer",
"barcode printer")
Run Code Online (Sandbox Code Playgroud)

我把逗号放回去,并且\n显示了。我删除了逗号,并且再次有多行。

我删除了无关的东西\n,所以现在我得到了想要的:

query_values:

("801","printer","barcode printer"),
("844","laptop","windows"),
("997","printer","barcode printer")
Run Code Online (Sandbox Code Playgroud)

因此,我的代码可以正常工作,但是我\n对旧版本代码中显示的字符完全感到困惑。为什么会这样呢? …

python string tuples newline repr

18
推荐指数
2
解决办法
1974
查看次数

从 pandas 插入 postgreSQL 表并进行“冲突”更新

我有一个 pandas DataFrame,需要将其存储到数据库中。这是我当前用于插入的代码行:

df.to_sql(table,con=engine,if_exists='append',index_label=index_col)
Run Code Online (Sandbox Code Playgroud)

如果我的表中不存在任何行,则此方法可以正常工作df。如果行已存在,我会收到此错误:

sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key
value violates unique constraint "mypk"
DETAIL:  Key (id)=(42) already exists.
 [SQL: 'INSERT INTO mytable (id, owner,...) VALUES (%(id)s, %(owner)s,...']
 [parameters:...] (Background on this error at: http://sqlalche.me/e/gkpj)
Run Code Online (Sandbox Code Playgroud)

并且没有插入任何内容。

PostgreSQL 有可选ON CONFLICT子句,可用于UPDATE现有表行。我阅读了整个pandas.DataFrame.to_sql 手册页,但找不到任何在函数ON CONFLICT内使用的方法DataFrame.to_sql()

我考虑过根据数据库表中已有的内容将我的 DataFrame 一分为二。所以现在我有两个 DataFrameinsert_rowsupdate_rows,我可以安全地执行

insert_rows.to_sql(table, con=engine, if_exists='append', index_label=index_col)
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有UPDATE相当于 的东西DataFrame.to_sql()。那么如何使用 DataFrame 更新表呢update_rows

python postgresql insert-update dataframe pandas

9
推荐指数
4
解决办法
9106
查看次数

+ 与 f-string 的字符串连接

假设我有两个变量:

>>> a = "hello"
>>> b = "world"
Run Code Online (Sandbox Code Playgroud)

我可以通过两种方式连接它们;使用+

>>> a = "hello"
>>> b = "world"
Run Code Online (Sandbox Code Playgroud)

或者使用 f 字符串:

>>> a + b
"helloworld"
Run Code Online (Sandbox Code Playgroud)

哪种方式更好或更好的做法?有人告诉我 f-string 在性能和健壮性方面是更好的做法,我想详细了解原因。

python string performance python-3.x f-string

8
推荐指数
3
解决办法
2953
查看次数

在Django中将两个不相关的表/模型与相同的主键合并

我有两个具有相同主键的不相关表。

ip            mac
11.11.11.11   48-C0-09-1F-9B-54
33.33.33.33   4E-10-A3-BC-B8-9D
44.44.44.44   CD-00-60-08-56-2A
55.55.55.55   23-CE-D3-B1-39-A6

ip            type     owner
22.22.22.22   laptop   John Doe
33.33.33.33   server   XYZ Department
44.44.44.44   VM       Mary Smith
66.66.66.66   printer  ZWV Department
Run Code Online (Sandbox Code Playgroud)

第一个表每分钟自动刷新一次。我无法更改数据库结构或填充它的脚本。

两个表都有ip作为主键。

在视图中,我想显示一个这样的表:

ip           mac               type    owner          Alert
11.11.11.11  48-C0-09-1F-9B-54                        Unauthorized
55.55.55.55  23-CE-D3-B1-39-A6                        Unauthorized
22.22.22.22                    laptop  John Doe       Down
66.66.66.66                    printer ZWV Department Down
33.33.33.33  4E-10-A3-BC-B8-9D server  XYZ Department OK
44.44.44.44  CD-00-60-08-56-2A VM      Mary Smith     OK
Run Code Online (Sandbox Code Playgroud)

我该如何建模?我是否应该将两个主键中的一个作为外键?

代码运行后,将有大量数据,因此我想确保它足够快。

检索数据最快的方法是什么?


更新:

我尝试OneToOneField用于第二张桌子。

这有助于我获得两个表中的记录以及未授权设备的记录(第二个表中缺少IP):

ip           mac               type    owner …
Run Code Online (Sandbox Code Playgroud)

django django-models legacy-database

6
推荐指数
2
解决办法
845
查看次数

有没有办法将 Python f-string 支持添加到 Visual Studio 2017?

在大部分时间使用 VSCode 之后,我将切换回使用 VS2017 进行大部分 Python 开发。在 VSCode 中,我能够很好地使用带有语法高亮和智能感知的 f 字符串。

在 VS2017 中,当我使用 f 字符串时,它只会显示为原始字符串而不突出显示。这在程序运行时有效,但对于调试和编写,它使事情变得更加痛苦。

有谁知道这是否可以添加到VS2017?两者都在运行 python 3.6,所以我认为不应该有问题。

为了澄清,我指的是这些:

f'Hello My Name Is { user.Name }'
Run Code Online (Sandbox Code Playgroud)

python ide visual-studio f-string

5
推荐指数
0
解决办法
655
查看次数

如何始终为特定 django 模型预取相关

我的一个模型中有许多相关对象__str__。这使得管理站点运行速度非常慢。

即使没有明确请求,是否可以以始终执行 prefetch_lated 的方式设置模型?

django django-models prefetch

4
推荐指数
1
解决办法
1711
查看次数

如何获取 Django 查询集中的列列表?

我有一个代码,可以使用大量注释等从不同的表创建多个复杂的查询集......

然后代码使用 union 连接这些查询集。

每个查询集本身似乎都很好。打电话print(len(qset))对他们每个人都有效。

但之后combined_qset = qset1.union(qset2),我收到以下错误:

django.db.utils.ProgrammingError: each UNION query must have the
same number of columns
LINE 1: ..., '') AS "owner" FROM "t1") UNION (SELECT "field_x...
                                                     ^
Run Code Online (Sandbox Code Playgroud)

.only(...)当我查看代码时,我计算并调用中的字段数量.values(...),计算注释的数量等,似乎所有这些查询集都具有完全相同的列数。

错误消息仅显示生成的 SQL 的一小部分(见上文),因此它并没有多大帮助。

有没有一种简单的方法来获取查询集的列列表,以便我可以找到差异并修复它?

django django-queryset

3
推荐指数
1
解决办法
3699
查看次数

使用 f 字符串舍入浮点数

使用 % 格式,我可以四舍五入字符串中的小数位数:

pi = 3.14159265
print('pi = %0.2f' %pi)
Run Code Online (Sandbox Code Playgroud)

在输出中(在终端中)这会给我:

pi = 3.14
Run Code Online (Sandbox Code Playgroud)

我可以使用 f-strings 来完成这个任务吗?此功能已在 Python 3.6 中添加

python string multiline f-string

3
推荐指数
2
解决办法
2386
查看次数