小编Som*_*ter的帖子

如何使用jq将任意简单JSON转换为CSV?

使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?

这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').

例子

  1. 输入:

    [
        {"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
        {"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
        {"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
        {"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    code,name,level,country
    NSW,New South Wales,state,AU
    AB,Alberta,province,CA
    ABD,Aberdeenshire,council area,GB
    AK,Alaska,state,US
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    "code","name","level","country"
    "NSW","New South Wales","state","AU"
    "AB","Alberta","province","CA"
    "ABD","Aberdeenshire","council area","GB"
    "AK","Alaska","state","US"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输入:

    [
        {"name": "bang", "value": "!", "level": 0},
        {"name": "letters", "value": "a,b,c", "level": 0},
        {"name": "letters", "value": "x,y,z", "level": 1},
        {"name": "bang", "value": …
    Run Code Online (Sandbox Code Playgroud)

csv json jq

84
推荐指数
6
解决办法
5万
查看次数

如何使用sed替换配置文件的变量?

我一直在网上寻找这个答案,似乎无法找到它.

我有一个包含以下内容的配置文件:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
Run Code Online (Sandbox Code Playgroud)

我想将VAR5的值从VALUE5更改为VALUE10.不幸的是,我不知道VALUE5的价值所以我无法搜索它.所以基本上我需要使用sed(或其他)将VAR5的值替换为我想要替换它的任何值.

linux bash replace sed

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

如何使用命令行创建WAR文件?

我安装了JBoss Developer Studio,可以通过"鼠标右键项目>导出> WAR文件"创建WAR文件,但我想使用命令行将项目导出到WAR文件.

我安装了maven,这是Studio的一个要求,我读到我可以使用maven生成一个WAR文件,但我需要一个名为pom.xml的文件.当我搜索我的工作区和项目时,pom.xml丢失了.我可能需要手动创建pom.xml但我不确定如何.

我项目的目录树如下:

Siesta
??? build
?   ??? classes
??? src
??? WebContent
    ??? extjs
    ??? extjs-4.2.0
    ??? extjs-4.2.2
    ??? index.jsp
    ??? META-INF
    ??? siesta
    ??? tests
    ??? WEB-INF
Run Code Online (Sandbox Code Playgroud)

如何使用命令行为Maven/JBoss项目创建WAR文件?我使用Linux并且不想创建pom.xml文件,但如果没有其他方法,那么我将使用xml文件生成war文件.

编辑:

所以jar是创建war文件的方法.我写了一个小脚本,它将为我创建一个特定目录的war文件.

#!/bin/bash
cd Siesta/WebContent/
jar -cvf ../../Siesta.war *
cd -
Run Code Online (Sandbox Code Playgroud)

然后,如果您在ubuntu中的zip实用程序或归档管理器中打开war文件,您将看到此结构

    ??? extjs
    ??? extjs-4.2.0
    ??? extjs-4.2.2
    ??? index.jsp
    ??? META-INF
    ??? siesta
    ??? tests
    ??? WEB-INF
Run Code Online (Sandbox Code Playgroud)

我必须将CD放入我想要创建一个令人讨厌的war文件的目录中.我认为使用jar的-C选项可能有更好的方法,但是当我使用"jar -cvf Siesta.war -C Siesta/WebContent*"时,它没有相同的结果.

EDIT2:

jar -cvf my-app.war myfolder/
Run Code Online (Sandbox Code Playgroud)

为了我的应用程序在TomCat上工作,我使用以下内容:

cd Siesta/WebContent
jar -cvf Siesta.war *
Run Code Online (Sandbox Code Playgroud)

jboss war pom.xml maven siesta

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

覆盖pytest参数化函数名称

我的参数确定了参数化pytest的名称.我将使用一些随机化的参数进行这些测试.为了使我在junit中的报告名称不被搞砸,我想为每个参数化测试创建一个静态名称.

可能吗?

JUnit似乎有一个参数:更改参数化测试的名称

class TestMe:
    @pytest.mark.parametrize(
        ("testname", "op", "value"),
        [
            ("testA", "plus", "3"),
            ("testB", "minus", "1"),
        ]
    )
    def test_ops(self, testname, op, value):
Run Code Online (Sandbox Code Playgroud)

我尝试覆盖request.node.name但是我只能在测试执行期间重命名它.

我几乎肯定我需要写一个插件或夹具.您认为最好的方法是什么?

python rename parameterized fixtures pytest

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

如何在terraform中的另一个文件中引用在一个文件中创建的资源

terraform/env/res/main.tf:

resource "aws_security_group" "allow_all" {
  name        = "allow_all"
  description = "Allow all inbound traffic"
  vpc_id      = "${aws_vpc.main.id}"

  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port       = 0
    to_port         = 0
    protocol        = "-1"
    cidr_blocks     = ["0.0.0.0/0"]
  }
} 
Run Code Online (Sandbox Code Playgroud)

terraform/mod/sec/main.tf:

resource aws_elb " elb" { 
  name = "elb-example"
  subnets         = ["${data.aws_subnet_ids.all.ids}"]
  security_groups = ["${aws_security_group.allow_all.id}"] // SG 
  internal        = false
  listener = [
    {
      instance_port     = "80"
      instance_protocol = "HTTP"
      lb_port           = …
Run Code Online (Sandbox Code Playgroud)

terraform

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

在python中拆分相当于gzip文件

我试图在 Bash 中复制这个 bash 命令,它返回每个压缩 50MB 的文件。

split -b 50m "file.dat.gz" "file.dat.gz.part-"
Run Code Online (Sandbox Code Playgroud)

我在 python 等价物上的尝试

import gzip

infile_name = "file.dat.gz"

chunk = 50*1024*1024 # 50MB

with gzip.open(infile_name, 'rb') as infile:
    for n, raw_bytes in enumerate(iter(lambda: infile.read(slice), '')):
        print(n, chunk)
        with gzip.open('{}.part-{}'.format(infile_name[:-3], n), 'wb') as outfile:
            outfile.write(raw_bytes)
Run Code Online (Sandbox Code Playgroud)

这将每个 gzip 返回 15MB。当我用枪压缩文件时,它们每个都是 50MB。

如何在 python 中拆分 gzipped 文件,以便在压缩前每个拆分的文件每个 50MB?

python gzip split

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

createWriteStream vs writeFile?

这两个操作之间的基本区别是什么?

someReadStream.pipe(fs.createWriteStream('foo.png'));
Run Code Online (Sandbox Code Playgroud)

VS

someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });
Run Code Online (Sandbox Code Playgroud)

当使用请求库进行抓取时,我可以保存图片(png,bmp)等...仅使用前一种方法,而后一种方法存在相同的gibbersh(二进制)数据,但图像不会渲染.

他们有什么不同?

file-io stream fwrite request node.js

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

在Azure Web角色上更新aspnet.config

我有一个部署到Azure Web角色(云服务,而不是Azure Web站点)的SignalR解决方案,为了确保我们可以最大化每个实例的连接数,我需要对各种ASP.NET设置进行一些更改,如详细在这篇文章中:http://www.asp.net/signalr/overview/performance/signalr-performance#tuning

使用APPCMD进行相关更改的启动任务可以轻松更改appConcurrentRequestLimit和requestQueueLimit设置.但是,maxConcurrentRequestsPerCPU设置驻留在aspnet.config文件中,该文件无法通过相同的机制进行更改.

我尝试直接使用启动任务更新该文件(现在只是一个基本文件替换),但是在启动任务完成后似乎被Azure运行时替换,因此更改丢失了.我可以RDP进入机器并手动进行更改,因此我已经看到它可以工作,但对于我们希望按需扩展和缩小的服务而言,这是不可持续的.

有关如何在Azure环境中更改此设置的任何想法将不胜感激!

azure appcmd azure-web-roles signalr azure-cloud-services

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

AWS-CLI:将 RDS Aurora 数据库实例创建到从快照创建的现有集群中

根据我的研究,我发现使用 CLI 创建一个 Aurora 集群的唯一方法是从现有快照创建一个内部有实例的实例:

1) 从现有集群创建快照

2) 从快照启动集群

3) 将实例添加到集群中

因此,我使用最新的 AWS CLI 版本运行的命令如下(以及输出):

aws rds create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier analytics-replica-db \
  --db-cluster-identifier prodcluster
Run Code Online (Sandbox Code Playgroud)

哪个输出

{
    "DBClusterSnapshot": {
        "Engine": "aurora",
        "SnapshotCreateTime": "2017-07-24T15:08:12.836Z",
        "VpcId": "vpc-ID",
        "DBClusterIdentifier": "cluster_name",
        "DBClusterSnapshotArn": "arn:aws:rds:eu-west-1:aws_account:cluster-snapshot:analytics-replica-db",
        "MasterUsername": "db_username",
        "LicenseModel": "aurora",
        "Status": "creating",
        "PercentProgress": 0,
        "DBClusterSnapshotIdentifier": "analytics-replica-db",
        "IAMDatabaseAuthenticationEnabled": false,
        "ClusterCreateTime": "2016-04-14T11:10:02.413Z",
        "StorageEncrypted": false,
        "AllocatedStorage": 1,
        "EngineVersion": "5.6.10a",
        "SnapshotType": "manual",
        "AvailabilityZones": [
            "eu-west-1a",
            "eu-west-1b",
            "eu-west-1c"
        ],
        "Port": 0
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,我使用以下命令创建集群:

aws rds restore-db-cluster-from-snapshot \
  --db-cluster-identifier analytics-replica-cluster \ …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-aurora

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

Subprocess.popen() 无法在 Windows 上的参数内使用引号

我在 SO 上浏览了一篇又一篇文章,寻找一种使用 subprocess.popen 在参数内使用引号的方法,但我似乎找不到方法。

这在命令行下工作得很好

runme.bat --include="check|check2"
Run Code Online (Sandbox Code Playgroud)

Python

#!/usr/bin/python
import sys
import subprocess
import shlex

#command_line = "./runme.sh --include=\"check|check2\""
command_line = "runme.bat --include=\"check|check2\""

arg = shlex.shlex(command_line)
arg.quotes = '"'
arg.whitespace_split = True
arg.commenters = ''
command_line_args = list(arg)
print command_line_args

command_line_process = subprocess.Popen(
    command_line_args,
    universal_newlines=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

line = ""
while True:
    line = command_line_process.stdout.readline()
    if line:
        print line
        break
Run Code Online (Sandbox Code Playgroud)

运行文件

echo %* >> someargs.txt
Run Code Online (Sandbox Code Playgroud)

runme.sh

#!/bin/bash
echo $@
Run Code Online (Sandbox Code Playgroud)

我听说 subprocess.call() 是解决这个问题的方法,但我希望能够在程序运行时逐行迭代子进程的输出。

编辑:

这似乎是Python中的一个错误,因为在cmd中运行runme.bat可以正常工作,在linux中运行runme.py可以正常工作,只有在Windows上运行runme.py时才能正常工作。我在这里创建了一张票。 …

python windows subprocess call popen

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