小编wKa*_*vey的帖子

在Python中将字典保存到文件(替代pickle)?

回答我最后还是最后去了泡菜

好的,在另一个问题上有一些建议,我问我被告知使用pickle将字典保存到文件中.

我试图保存到文件的字典是

members = {'Starspy' : 'SHSN4N', 'Test' : 'Test1'}
Run Code Online (Sandbox Code Playgroud)

当pickle将它保存到文件中时......这就是格式

(dp0
S'Test'
p1
S'Test1'
p2
sS'Test2'
p3
S'Test2'
p4
sS'Starspy'
p5
S'SHSN4N'
p6
s.
Run Code Online (Sandbox Code Playgroud)

你能给我另一种方法将字符串保存到文件中吗?

这是我希望它保存的格式

members = {'Starspy':'SHSN4N','Test':'Test1'}

完整代码:

import sys
import shutil
import os
import pickle

tmp = os.path.isfile("members-tmp.pkl")
if tmp == True:
    os.remove("members-tmp.pkl")
shutil.copyfile("members.pkl", "members-tmp.pkl")

pkl_file = open('members-tmp.pkl', 'rb')
members = pickle.load(pkl_file)
pkl_file.close()

def show_menu():
    os.system("clear")
    print "\n","*" * 12, "MENU", "*" * 12
    print "1. List members"
    print "2. Add member"
    print "3. …
Run Code Online (Sandbox Code Playgroud)

python dictionary save pickle

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

向现有 django 模型添加新的唯一字段时的最佳实践

我有一个现有的模型,看起来有点像下面的......

class Resource(models.Model):

    id = models.AutoField(primary_key=True)
Run Code Online (Sandbox Code Playgroud)

我们已经使用它有一段时间了,现在Resource我们的数据库中有大约 1M 个这些对象的实例(以及相关的foreignkey/else 用法)。

我现在需要跟踪该模型上的另一个 ID,我想要强制执行的 ID 是唯一的。

other_id = models.IntegerField(unique=True)
Run Code Online (Sandbox Code Playgroud)

other_id信息当前存储在一些外部 CSV 中,我想(在此过程中的某个时刻)将此信息加载到所有现有Resource实例中。

添加上述字段后,Django 的makemigrations工作正常。但是,当我针对现有数据库应用所述迁移时,我收到一条错误,指示我需要提供默认值以用于所有现有Resource实例。相信很多人都见过类似的事情。

解决此限制的最佳方法是什么?我想到的一些方法...

    • 删除unique=True要求
    • 应用迁移
    • 从外部将值加载other_id到所有现有模型(通过某些管理命令或 1-off 脚本)
    • 添加unique=True回来并应用迁移
    • 将所有现有数据转储为 JSON
    • 刷新所有表
    • 应用迁移(unique=True)
    • 编写一个脚本来加载数据,添加正确的other_id
  1. (不确定这是否可行) - 编写一些自定义迁移逻辑,以other_id在运行时自动引用这些外部 CSV 来加载值manage.py migrate。如果(在将来的某个时刻)有人重新运行这些迁移并且这部分失败(无法id在 CSV 中找到现有资源来提取other_id),这可能会遇到问题。

所有这些感觉都很复杂,但我想我想做的也不是最简单的事情。

有任何想法吗?我不得不想象过去有人必须解决类似的问题。

谢谢!

python django database-migration python-3.x django-migrations

13
推荐指数
2
解决办法
6701
查看次数

Bash读取输出?

我在Ubuntu 11.4的终端上运行它.

假设我执行了一个bash脚本,输出是:

Test1: Some text...
Test2: Some text...
Test3: Some text...
Run Code Online (Sandbox Code Playgroud)

在同一个bash脚本中,我如何将上面的输出存储为一个或多个变量?

理想的解决方案是准备好在条件中使用,如下所示:(输出的第一行将存储在$ln1等等中)

if [ $ln1 = "Test1: Some text..." ] ; then
Run Code Online (Sandbox Code Playgroud)

linux bash terminal ubuntu

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

使用MultipleChoiceFilter时动态重新加载选择

我正在尝试构建一个MultipleChoiceFilter选项,其中的选择是相关模型(DatedResource)上可能存在的日期的集合。

到目前为止,这是我正在使用的东西...

resource_date = filters.MultipleChoiceFilter(
    field_name='dated_resource__date',
    choices=[
        (d, d.strftime('%Y-%m-%d')) for d in
        sorted(resource_models.DatedResource.objects.all().values_list('date', flat=True).distinct())
    ],
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

当它显示在html视图中时...

在此处输入图片说明

最初,这很好用,但是,如果我创建DatedResource具有新的不同date值的新对象,则需要重新启动我的Web服务器,以使它们成为此过滤器中的有效选择。我相信这是因为该choices列表是在Web服务器启动时进行一次评估的,而不是在每次我的页面加载时进行评估的。

有什么办法可以解决这个问题?也许通过一些创造性的使用ModelMultipleChoiceFilter

谢谢!

编辑: 我尝试了一些简单的ModelMultipleChoice用法,但遇到了一些问题。

resource_date = filters.ModelMultipleChoiceFilter(
    field_name='dated_resource__date',
    queryset=resource_models.DatedResource.objects.all().values_list('date', flat=True).order_by('date').distinct(),
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

HTML表单显示得很好,但是选择不是过滤器可接受的值。我"2019-04-03" is not a valid value.假设收到验证错误,因为此过滤器需要datetime.date对象。我考虑过使用coerce参数,但是ModelMultipleChoice过滤器不接受这些参数。

根据狄克格罗滕的评论,我尝试使用链接问题中的建议。最终像

resource_date = filters.ModelMultipleChoiceFilter(
    field_name='dated_resource__date',
    to_field_name='date',
    queryset=resource_models.DatedResource.objects.all(),
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

这也不是我想要的,因为HTML现在的形式是:a)显示str每个的表示形式DatedResource,而不是DatedResource.date字段; …

django django-filters multiplechoicefield modelmultiplechoicefield

6
推荐指数
1
解决办法
263
查看次数

功能类似于Excel中的importxml?

我喜欢使用 Google Docs 函数 =importxml() 但想知道 Excel 2010 中是否有类似的功能?我似乎找不到程序自动从链接的 XML 文件中提取数据的方法。

例如,我希望能够设置一个标题为“项目名称”的列,然后让下一列将上一列中用户输入的项目名称附加到此 url

http://util.eveuniversity.org/xml/itemLookup.php?name=
Run Code Online (Sandbox Code Playgroud)

然后解析生成的 XML 文件以返回类型 ID。这是在谷歌文档中使用

=importxml(concatenate("http://util.eveuniversity.org/xml/itemLookup.php?name=",A3);"//itemLookup/typeID")
Run Code Online (Sandbox Code Playgroud)

A3 是具有项目名称的列,在本例中为 Tritanium,并从生成的 XML 文件导入数据

http://util.eveuniversity.org/xml/itemLookup.php?name=Tritanium
Run Code Online (Sandbox Code Playgroud)

返回值 34。

我有一个大约 20 个项目名称的列表,每次打开文件时,Google 文档都会自动更新项目 ID。Excel 2010 有没有办法复制这个功能?

谢谢!

将要

xml excel vba excel-2010 xml-parsing

5
推荐指数
2
解决办法
4万
查看次数

当使用UTF-8和PuTTY时,NCURSES边界打印为q,x

我正在尝试学习ncurses为我的程序添加一些功能但是我似乎无法将我的终端设置设置为默认的ncurses窗口边框按预期显示的点.

这是我得到的带有框边框的窗口的输出:

  lqqqqqqqqk
  x        x
  x        x
  x        x
  mqqqqqqqqj
Run Code Online (Sandbox Code Playgroud)

但是我应该得到这个:

  ??????????
  ?        ?
  ?        ?
  ?        ?
  ??????????
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一解决这个问题的方法是将我的PuTTY删除字符集设置为Latin-1而不是UTF-8,但是这会混淆我的所有其他应用程序,包括VIM.

我找到了一些相关的SO问题(12)但是他们的解决方案都没有帮助我.我从第二个中删除的唯一有趣的事情是,如果我printf '\342\224\224\342\224\200\342\224\220'在命令行中运行它会打印出来???(这是正确的......).

这是我用来测试这个的简单程序:

 #include <iostream>
 #include <ncurses.h>
 #include <string>
 #include <cstring>

 int main() {
     WINDOW *my_win;
     int startx, starty, width, height;
     int ch;

     initscr();
     cbreak();
     keypad(stdscr, TRUE);
     refresh();

     int height = 5;
     int width = 10;
     my_win = newwin(height, width, 1, 2);
     box(my_win, 0, 0);
     wrefresh(my_win);

     getch();

     endwin();
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我有什么想法可能做错了吗?谢谢!

c++ putty ncurses

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

不明确的重载运算符 C++20

我正在尝试在最新的 Visual Studio 和 Clang 版本中测试我的项目。弹出的错误之一与不明确的运算符有关(with reversed parameter order)。这在 C++17 中似乎不会出现。

例如:(https://godbolt.org/z/Gazbbo

struct A {
    bool operator==(const A& other) const { return false; }
};

struct B : private A {
    B(const A&);
    bool operator==(const B& other) const { return false; }
};

bool check(A a, B b) {
    return b == a;
}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么这会成为一个问题。在我看来,这里唯一可行的函数是可以隐式转换为bool operator==(const B& other) constas 的函数,但不能反向转换。事实上,如果我用标记,我会得到一个错误,无法转换为.ABB(const A&)explicitBA

我试图了解除了使用explicit或使用B(a). 想象一下A …

c++ operator-overloading ambiguous spaceship-operator c++20

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

java 以什么顺序对文件/目录进行排序?

我对 java 有点陌生,正在尝试创建一个程序,该程序循环并打印出指定位置内的所有目录。这是我到目前为止所拥有的:

import java.io.File;


public class main{

    public static void main(String[] args) {
        File[] files = new File("/media/will/External/Movies").listFiles();
        showFiles(files);
    }

    public static void showFiles(File[] files) {
        String name;
        for (File file : files) {
            if (file.isDirectory()) {
                name = file.getName();
                if (!(name.contains("!")) && name.contains("(") && name.contains(")")) {
                    System.out.println("Directory: " + name);
                }
                showFiles(file.listFiles()); // Calls same method again.
            } else {
                // System.out.println("File: " + file.getName());

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在那里进行了一些检查以仅打印出某些文件夹名称(必须同时包含“(”和“)”并且不能包含“!”)。

我在控制台中得到的一段输出是这样的:

Directory: The Matrix (1999)
Directory: The Matrix …
Run Code Online (Sandbox Code Playgroud)

java

2
推荐指数
1
解决办法
3295
查看次数

使用原型+定义而不仅仅是定义会加快程序的速度吗?

我是C编程的新手,但对Python,Java和Perl的经验有限.我只是想知道将main()上面的函数原型和main()下面的函数定义的优点是什么,而不是仅仅在main()上面定义所述函数.根据我的阅读,该定义也可以作为原型.

提前致谢,

c prototype function

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

如何在PHP中多次使用mysqli结果行?

我正在尝试整理一个工具,以帮助我即将到来的幻想曲棍球草案,同时也学习PHP.我试图在一个页面上创建多个列表,一个显示前10个可用的整体玩家,然后是其他按位置显示前10个可用玩家的列表.

这是我的SQL查询/代码

include 'db/connect.php';

$sql='SELECT * FROM players WHERE pick IS NULL';

$players=$conn->query($sql);

if($players === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
} else {
    $rows_returned = $players->num_rows;
} 
Run Code Online (Sandbox Code Playgroud)

然后在页面后面我有一个while循环,生成一个包含前十名玩家的表

while ($row = $players->fetch_array()) {
    if ($i == 10) {
        break;
    }

    echo "<tr>";
    echo "<td>" . $row['Rank'] . "</td>";
    echo "<td>" . $row['Player'] . "</td>";
    echo "<td>" . $row['Team'] . "</td>";
    ...
Run Code Online (Sandbox Code Playgroud)

一切正常.但是,当我使用相同的方法生成仅包含特定位置(C,RW/LW等等)的列表时,它会从前10名玩家列表结束的位置开始.(请参阅我的意思:http://i.imgur.com/JApeftU.png)

我认为这与$players->fetch_array()我有关,但我不知道绕过它最好的方法是什么.

有任何想法吗?谢谢!

php mysqli

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

将pcap格式从LINKTYPE_LINUX_SSL转换为LINKTYPE_ETHERNET

我试图解析一个pcap文件,但我需要linktype LINKTYPE_ETHERNET,而我当前的文件正在使用LINKTYPE_LINUX_SSL(文档http://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL.html)

有谁知道这可能是我可以完成使用的任务tshark,或者我将不得不一起修改一些自定义以获得转换.

谢谢!

pcap wireshark tshark

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