小编Tom*_*ick的帖子

在Python中读取相当大的json文件

可能重复:
在python中加载大型json文件是否有内存高效且快速的方法?

所以我有一些相当大的json编码文件.最小的是300MB,但这是迄今为止最小的.其余的是多GB,大约2GB到10GB +.

所以当我尝试使用Python加载文件时,我似乎耗尽了内存.我目前正在进行一些测试,看看处理这些东西需要多长时间才能看到从这里开始.这是我用来测试的代码:

from datetime import datetime
import json

print datetime.now()

f = open('file.json', 'r')
json.load(f)
f.close()

print datetime.now()
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,Python给了我一个MemoryError.似乎json.load()调用json.loads(f.read()),它试图首先将整个文件转储到内存中,这显然不会起作用.

我能干什么方式解决这个问题吗?

我知道这是旧的,但我不认为这是重复的.答案是一样的,但问题是不同的.在"重复"中,问题是如何有效地读取大文件,而这个问题处理甚至根本不适合内存的文件.效率不是必需的.

python json

74
推荐指数
1
解决办法
8万
查看次数

从字节中删除NUL字符

自学Go我正在构建一个简单的服务器,它接受一些输入,进行一些处理,并将输出发送回客户端(包括原始输入).

输入的长度可以从大约5到13个字符+结束线以及客户​​端发送的其他任何guff.

输入被读入字节数组,然后转换为字符串进行某些处理.另一个字符串被附加到此字符串,整个事物被转换回字节数组以发送回客户端.

问题是输入用一堆NUL字符填充,我不知道如何摆脱它们.

所以我可以循环遍历数组,当我找到一个空字符时,记下长度(n),创建一个新长度的字节数组,并将前n个字符复制到新的字节数组并使用它.这是最好的方式,还是有什么东西让我更容易?

一些剥离代码:

data := make([]byte, 16)
c.Read(data)

s := strings.Replace(string(data[:]), "an", "", -1)
s = strings.Replace(s, "\r", "", -1)
s += "some other string"
response := []byte(s)
c.Write(response)
c.close()
Run Code Online (Sandbox Code Playgroud)

此外,如果我在这里做任何其他明显愚蠢的事情,那将很高兴知道.

go

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

使用java中的预准备语句插入自定义SQL类型

我有一些自定义类型.它们基本上都是枚举.以下是它们的示例:

CREATE TYPE card_suit AS ENUM
   ('spades',
    'clubs',
    'hearts',
    'diamonds');
Run Code Online (Sandbox Code Playgroud)

我在Java中有一些准备好的语句,看起来像这样:

// Setup stuff up here.
sql = "INSERT INTO foo (suit) VALUES (?)";
st.setString(1, 'spades');
st.executeUpdate(sql);
Run Code Online (Sandbox Code Playgroud)

而Java给了我一些令人讨厌的例外:

org.postgresql.util.PSQLException: ERROR: column "suit" is of type card_suit but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)

他们很高兴给我一个提示,但我不确定如何遵循它.

java sql postgresql prepared-statement

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

Python中树的递归函数

我正在尝试在Python中创建一个函数,它接受树的任意节点,并根据节点给出填充列表列表.

鉴于以下绘制得很糟糕的树:

树

如果我们从例如节点5开始,我们应该得到:

  • 包含具有相同父节点的所有节点的列表,包括我们从(4和5)开始的节点
  • 任何子节点,但不是他们的孩子(6).
  • 父节点和具有相同父节点的父节点及其父节点等,直到我们到达根节点,但不包括根节点(在这种情况下只有2和3,但如果树更深,我们开始更低,这里还有更多.

节点应最终列在列表列表中,每个深度列表一个列表.

python中的节点:

nodes = [
    {'id': 1, 'parent': None},
    {'id': 2, 'parent': 1},
    {'id': 3, 'parent': 1},
    {'id': 4, 'parent': 2},
    {'id': 5, 'parent': 2},
    {'id': 6, 'parent': 5},
    {'id': 7, 'parent': 6},
    {'id': 8, 'parent': 3}
]
Run Code Online (Sandbox Code Playgroud)

我们只能看到父母,而不是孩子,但遗憾的是,这是我必须使用的数据格式.

因此,如果我们采用节点5,我们希望得到一个类似于此的节点列表:

nl = [
    [{'id': 6, 'parent': 5}],
    [{'id': 4, 'parent': 2}, {'id': 5, 'parent': 2}],
    [{'id': 2, 'parent': 1}, {'id': 3, 'parent': 1}],
]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码.我认为递归函数可能是最简单的方法.不幸的是,它似乎没有像我认为应该做的那样,显然我做的事情非常错误.而且这段代码甚至不考虑根据我不完全确定如何处理的子节点,除了可能更容易处理之后.

node_list = []

def pop_list(nodes=None, parent=None, node_list=None):
    if parent …
Run Code Online (Sandbox Code Playgroud)

python tree recursion

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

杰克逊多个对象和巨大的json文件

我觉得答案可能与此重复:杰克逊 - Json到POJO有多个条目,但我认为这个问题可能不同.我也使用原始数据绑定而不是完整数据绑定.

所以就像那个问题的提问者一样,我在文件中有多个对象,我正在尝试将它们变成POJO并将它们填充到我的设计数据库中,这样我就可以快速而不是慢慢地访问数据.

这里的文件大小为几十GB,每个文件中有多达数百万个对象.无论如何这里是我到目前为止:

ObjectMapper mapper = new ObjectMapper();
Map<String,Object> data = mapper.readValue(new File("foo.json"), Map.class);
System.out.println(data.get("bar"));
Run Code Online (Sandbox Code Playgroud)

这对于在foo中打印第一个对象的bar元素非常有用,但是我需要一种方法来迭代每个元素,这样就不会占用我所有的记忆.

谢谢.

java json jackson

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

SQL列按两列的最高值排序

我有一个带有一些双打的PostgreSQL表,它们存储了%.所以我们说列是:

pc_1
pc_2
Run Code Online (Sandbox Code Playgroud)

我想要的是按这两列中的哪一列具有最高下降量,然后由另一列下降,再次下降.

所以,如果我们的数据是,请说:

id  pc_1  pc_2 
 1  12.5  11.0
 2  10.0  13.2
 3  13.2  9.0
Run Code Online (Sandbox Code Playgroud)

选择*来自mytable order by <something>将给出:

 2  10.0  13.2
 3  13.2  9.0
 1  12.5  11.0
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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

Django Rest Framework - 使用会话和令牌身份验证

我正在尝试使其正常工作,但不知道这是否可行。它应该这样做。

我开发使用一个Web应用程序Django+ Rest-Framework+ jQuery,我想有一个外部应用程序使用相同的RESTAPI,使用JWT Tokens进行身份验证。

我现在的配置是这样的。

设置.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_RENDERER_CLASS': [
        'rest_framework.renderers.JSONRenderer',
    ]
}

SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('Bearer',),
    }
Run Code Online (Sandbox Code Playgroud)

视图.py

class ListFileView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):
        user = request.user

        if user:

            obj = Foo.objects.filter(owner=user)
            serializer = FooSerializer(obj, many=True)
            data = serializer.data

            return Response(data, status=status.HTTP_200_OK)

        return Response({'detail': 'You have no access to files.'}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

棘手的部分是,当我使用:

permission_classes = (IsAuthenticated,)
Run Code Online (Sandbox Code Playgroud)

我可以ajax从外部应用程序(使用有效JWT …

python django django-rest-framework django-rest-framework-simplejwt

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

Neo4j在创建之前检查节点是否存在?

我有一种感觉,我认为这一切都错了.但无论如何.

我有一个sql数据库,它本质上是一个有目的的非规范化表,我已经构建了使这个任务更容易,所以我可以从一个表中获取东西.

我所拥有的是一对成对的表,如下所示:

user_lo | user_hi | something_else | other stuff
1000    | 1234    | 1231251654     | 123
1050    | 1100    | 1564654        | 45648
1080    | 1234    | 456444894648   | 1
Run Code Online (Sandbox Code Playgroud)

等等.

所以对于我的neo4j图形数据库,我希望每个用户id都作为一个节点,其他的东西不是太重要,但基本上是关系中的东西.

我只想为每个用户创建一个节点,所以我的感觉是,如果我做这样的事情:

while (rs.next()) {
    node_lo = db.createNode();
    node_lo.setProperty("user_id", rs.getInt(1));
    node_hi = db.createNode();
    node_hi.setProperty("user_id", rs.getInt(2));
}
Run Code Online (Sandbox Code Playgroud)

当我们与USER_ID 1234添加节点第二次,它只是创造一个新的节点,但我什么,我想要的是它只是抓住,而不是创造,所以我可以将它添加到关系到1080这个节点这个案例.

那么这样做的方法是什么?

java neo4j

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

如何修复“str”对象不是映射错误

我会开始说这不是一个重复的问题。我的问题与 Django 2.2 的 url 有点不同。

当将 HttpResponseRedirect 返回到同一应用程序中的另一个视图时,视图触发“str”对象不是映射错误。

我真的不知道出了什么问题。我在同一项目的其他应用程序中使用相同的方法并且它有效。

项目网址.py

urlpatterns = [
    url(r'^$', Home.as_view()),
    path('dashboard/', include('dashboard.urls')),
    path('main/', include('main.urls'))
]
Run Code Online (Sandbox Code Playgroud)

应用程序 url.py

urlpatterns = [
  path('', views.Section.as_view(), name='main-form')
]
Run Code Online (Sandbox Code Playgroud)

应用程序视图.py

class Home(View):
  def get(self, request):
    return render(request, 'index.html', context={})

  def post(self, request):
    return HttpResponseRedirect(reverse('main-form'))


class Section(View):

  def get(self, request):
    return HttpResponse("Test Ok")
Run Code Online (Sandbox Code Playgroud)

在发布主页表单后,它应该重定向到主表单视图(剖面视图类),但我收到错误。

如果我在模板 url 中使用 url,它会触发相同的错误{% url 'main-form' %}

如果我手动导航从地址栏查看,视图呈现良好。

怎么了?

django django-urls django-views

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

如何修复 Field 定义了与模型“auth.User”的关系,该模型已被换出

我正在尝试将我的用户模型更改为自定义模型。我不介意删除我的数据库并只使用一个新数据库,但是当我尝试运行 makemigrations 时,我收到此错误

bookings.Session.session_client: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out.
        HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'.
Run Code Online (Sandbox Code Playgroud)

预订/views.py

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from bookings.models import Session
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User

# Create your views here.

def book(request, Session_id):
    lesson = get_object_or_404(Session, pk=Session_id)
    try:
        client = request.user.id
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'booking/details.html', {
            'lesson': lesson,
            'error_message': "You need to login first", …
Run Code Online (Sandbox Code Playgroud)

python django

6
推荐指数
3
解决办法
7208
查看次数