社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Barmar

Barmar 最近创建的主题
Barmar 最近回复了
3 年前
回复了 Barmar 创建的主题 » 利用python中的单链表实现队列中的AttributeError

当队列为空时,可以设置 p None 当你这么做的时候 p = self.front .然后,当你尝试这样做时,会出现错误 while p.link is not None 因为 P 不是节点。

如果你在排队等待第一个noe,你应该从方法返回。

    def enqueue(self, data):
        temp = Node(data)
        if self.front is None:
            self.front = temp
            return

        p = self.front
        while p.link is not None:
            p = p.link
        p.link = temp
        temp.link = None
3 年前
回复了 Barmar 创建的主题 » 条件不适用于PHP和mysqli

一旦你把一个学生分配给一个老师,你就应该跳出教师循环,这样你就不会试图把这个学生分配给另一个老师。

当你把一个学生分配给一个老师时,你需要增加 $teacher_info['assigned'] .为了做到这一点,迭代变量需要是对数组元素的引用;否则,您将获得阵列的副本,这不会影响未来的迭代。

在下面的代码中,我已将所有查询转换为准备好的语句。

$conn = mysqli_connect($serverName, $user, $password, $dbName);
if(mysqli_connect_errno()){
    echo "Failed to connect to mysqli.".mysqli_connect_errno();
} else {
    $insert_assignment_stmt = $conn->prepare("INSERT INTO assignment(student_name, advisor_name, subject) values(?, ?, ?)");
    $insert_assignment_stmt->bind_param("sss", $name_student, $name_teacher, $subject);
    $update_teacher_stmt = $conn->prepare("UPDATE teachers SET assigned = assigned + 1 WHERE name = ?");
    $update_teacher_stmt->bind_param("s", $name_teacher);
    $update_student_stmt = $conn->prepare("UPDATE students SET assigned = 1 WHERE name = ?");
    $update_student_stmt->bind_param("s", $name_student);

    foreach($students_info as &$student_info){
        foreach($teachers_info as &$teacher_info){
            if($student_info['assigned'] == 0 && $student_info['ee_subject'] == $teacher_info['ee_subject_1_choice'] && $teacher_info['assigned'] < 4 ){
                $name_student = $student_info['name'];
                $name_teacher = $teacher_info['name'];
                $subject = $student_info['ee_subject'];

                $insert_assignment_stmt->execute();
                $update_teacher_stmt->execute();
                $update_student_stmt->execute();

                $teacher_info['assigned']++;

                break;
            }
        }
    }
}
mysqli_close($conn);
3 年前
回复了 Barmar 创建的主题 » 我需要用python替换SQL文件中的某个数字

在中打开文件时 w

你应该把读和写作为独立的步骤——首先阅读整个内容,然后打开它进行写作。

另一个问题是你的 for i in line: line 是一根绳子,所以 i 是一个字符(包含一个元素的字符串)。这永远不会是一场灾难 int .

可以使用正则表达式查找数字并替换它。

import re

with open("prueba.sql", "r") as fin:
    contents = fin.read()

contents = re.sub(r'\b\d+\b', '5000', contents)

with open("prueba.sql", "w") as fout:
    fout.write(contents)
3 年前
回复了 Barmar 创建的主题 » 使用jQuery从select中选择值时,如何更改Div内容?

使用 this.value 在事件处理程序中获取下拉列表中选择的值。

当您从下拉列表中选择某个内容时 change 事件被触发,而不是 click .

div:gt(5) 不是应该显示结果的div的正确选择器。编号始于 0 所以是DIV number 4 .你可以用 .eq(4) 选择那个。

var content = $("div").eq(4);
$("select").on("change", function(event) {
  content.html(this.value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="toolbar-wrapper">
  <div>
    <div>
      <label>Product Count</label>
      <div class="select-group">
        <select>
          <option value="4 products" selected="selected">4 products</option>
          <option value="6 products">6 products</option>
          <option value="8 products">8 products</option>
        </select>
      </div>
    </div>

    <div>4 products</div>
  </div>
</div>
3 年前
回复了 Barmar 创建的主题 » 用Python从文件的2个元素创建哈希表

第二个 f.readlines() 没有要读取的内容,因为您已经读取了整个文件。

将文件读入列表变量,然后遍历列表。

with open("/Users/admin/Downloads/Project_files/dictionary.txt") as f, open("/Users/admin/Downloads/Project_files/text_combined.txt", "w",encoding = 'utf-8') as textfile:
    lines = f.readlines():
    for i in lines:
        for j in lines:
            text_c = i.strip() + j.strip()
            n = text_file.write(SHA1_hash(text_c) + "\n")
3 年前
回复了 Barmar 创建的主题 » 在MySQL中使用三个表进行计算

你需要在总和内乘以工资率。你要计算小时数的总和,然后乘以组中的一个比率。因此,如果任务是由多人完成的,你可以选择其中一人,并使用他们的工资作为整个任务的费率。

SELECT
   # we need the title of the task
   t.title,

   # total hours completed on this task by employees
   # dividing the diff by 3600 to get sec into hour form
   SUM(((TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600)) totalHrs,

   # calculate the total cost by each employee and sum it up
   SUM(((TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600) * wrd.wages_rate) cost
FROM task t
JOIN task_assignment ta on t.id = ta.task_id
JOIN work_rights_detail wrd on ta.employee_id = wrd.account_id
GROUP BY ta.task_id

为了避免重复时间段的计算,可以在子查询或CTE中进行。

WITH task_hours AS (
    SELECT 
        ta.task_id, 
        ta.employee_id, 
        (TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600 AS hours_worked
    FROM task_assignment AS ta
)

SELECT 
    t.title, 
    SUM(th.hours_worked) AS totalHrs, 
    SUM(th.hours_worked * wrd.wages_rate AS cost
FROM task AS t
JOIN task_hours AS th ON t.id = th.task_id
JOIN work_rights_detail wrd on th.employee_id = wrd.account_id
GROUP BY ta.task_id
4 年前
回复了 Barmar 创建的主题 » C到Python管道-如何检测读卡器访问

当你停止阅读程序时,作者将收到 SIGPIPE 当它试图写入管道时发出信号。此信号的默认配置是终止进程。

如果要检测这种情况,请使用 signal() sigaction() 改变性情 SIG_IGN .然后写信给管道将报告 EPIPE 错误

此外,不应每次通过回路时都关闭和重新打开管道。开始时打开一次,结束时关闭。关闭管道会导致读卡器出现EOF,之后它将无法读取任何内容。

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
  
int main()
{
    int fd;
  
    // FIFO file path
    char * myfifo = "/tmp/myfifo";
    
    // Creating the named file(FIFO)
    // mkfifo(<pathname>, <permission>)
    mkfifo(myfifo, 0666);
    // Open FIFO for write only
    fd = open(myfifo, O_WRONLY);
  
    signal(SIGPIPE, SIG_IGN);

    char arr1[80];
    while (1)
    {
  
        // Take an input from user.
        fgets(arr1, 80, stdin);
  
        // Write the input on FIFO
        // and close it
        int res = write(fd, arr1, strlen(arr1)+1);
        if (res < 0) {
            perror("write");
            break;
        }
    }
    close(fd);
    return 0;
}

当您停止编写程序时,当读卡器尝试从管道中读取时,它将获得EOF。什么时候 f.readline() 到达EOF时,它返回一个空字符串。你的Python脚本没有检查这一点,所以它会无限循环。

将读卡器更改为:

with open("/tmp/myfifo") as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line, end = "")

当管道闭合时,回路将终止。

3 年前
回复了 Barmar 创建的主题 » 有人能解释一下python代码是如何工作的吗?[重复]

该循环实际上相当于:

for x in a:
    a[1] = x

所以每次通过循环,它都会 a[1] 指向列表的当前元素。最后,它包含列表的最后一个元素。

这个 mysql.proc 表在MySQL 8.0中被删除。看见 No more mysql.proc in MySQL 8.0

你可以用 information_schema.routines 获取有关存储过程的信息。但这是只读视图,无法更新。所以我认为再也没有简单的方法来重命名程序了。您可以使用动态SQL来使用此信息定义具有新名称的过程。

编辑:

不幸的是,仅在MySQL中无法实现上述功能,因为 CREATE PROCEDURE 无法使用 PREPARE 信息模式。日常工作 不包含重新创建过程所需的所有信息。你可以用一种外部语言通过执行 SHOW CREATE PROCEDURE 查询,然后替换名称以形成新查询。

4 年前
回复了 Barmar 创建的主题 » 从Python交互运行多个Bash命令

你不需要等待 # 在每个命令之间。您可以发送所有命令,忽略shell提示。外壳缓冲所有输入。

您只需等待用户名和密码提示,然后等待最终的 # 在最后一个命令之后。

你还需要发送 exit 命令,否则你就得不到EOF。

import pexpect, sys

child = pexpect.spawn("bash", timeout=60)
child.logfile = sys.stdout
child.sendline("cd /workspace/my_notebooks/code_files")
child.sendline('ls')
child.sendline('git add .')
child.sendline('git commit')
child.sendline('git push origin main')
child.expect('Username .*:')
child.sendline(<my_github_username>)
child.expect('Password .*:')
child.sendline(<my_github_password>)
child.expect('#')
child.sendline('exit')
child.expect(pexpect.EOF)

如果遇到60秒超时,可以使用 timeout=None 禁用这个。看见 pexpect timeout with large block of data from child

还可以在一行中组合多个命令:

import pexpect, sys

child = pexpect.spawn("bash", timeout=60)
child.logfile = sys.stdout
child.sendline("cd /workspace/my_notebooks/code_files && ls && git add . && git commit && git push origin main')
child.expect('Username .*:')
child.sendline(<my_github_username>)
child.expect('Password .*:')
child.sendline(<my_github_password>)
child.expect('#')
child.sendline('exit')
child.expect(pexpect.EOF)

使用 && 两个命令之间的切换确保了在任何一个命令失败时停止。

一般来说,我不建议使用 pexpect 为了这个。制作一个shell脚本,该脚本可以执行您想要的所有操作,并使用单个脚本运行该脚本 subprocess.Popen() 呼叫

3 年前
回复了 Barmar 创建的主题 » 如何将这些重复的if语句转换为python中的单个循环?

使用一个循环,对图像的连续切片求和 n 列表

for num2, row2 in enumerate(grid):
    for idx in range(len(n)):
        if sum(n[:idx]) <= num2 < sum(n[:idx+1]):
            grid[num2][idx+1] = c[num2]

这是您编写的代码到循环的直接映射,如果 N 不会变得太大。BrokenBenchmark的答案经过优化,以利用每个片段的总和是前一个片段加上当前元素的总和这一事实。

3 年前
回复了 Barmar 创建的主题 » 如何在python中计算空行数

你在增加 line_num 对于空行和非空行。你应该是递增的 empty_lines 什么时候 len(line) == 0 .

自从 行数 应该计算所有行,在任何条件之外递增。

import sys

def read():
    file_name = input("Name of the file to be read: ")
    try:
        with open(file_name, 'r') as file:
            lst = []
            line_num = 0
            accept_line = 0
            reject_line = 0
            empty_line = 0
            for line in file:
                line_num += 1
                line = line.strip() 
                if (len(line) == 0):
                    empty_line += 1
                elif (line.isalpha()):
                    accept_line += 1
                    lst.append(line)
                else:
                    reject_line += 1

        print("Read", line_num, "lines")
        print("Rejected", reject_lines, "lines")
        print("Empty", empty_line, "lines")
    except FileNotFoundError:
        print("open", file_name, "failure.")
        sys.exit(0)
    return lst, accept_line
3 年前
回复了 Barmar 创建的主题 » MySQL取消加入案例不匹配

使用一个单独的查询来获取其他记录,并将它们与 UNION

SELECT *
FROM (
    SELECT u.id, u.name, n.other_user, n.notification FROM notifications n
    INNER JOIN users u ON
    CASE
      WHEN n.user = :me THEN u.id = n.other_user
      WHEN n.other_user = :me THEN u.id = n.user
    END
    
    UNION
    
    SELECT n.user, '', n.other_user, n.notification
    FROM notification n
    WHERE n.user = 0 AND n.other_user = 0
) AS x
ORDER BY x.id
3 年前
回复了 Barmar 创建的主题 » 使用jQuery更改订单内容对象

使用 .prependTo() 方法将元素移动到容器元素的开头。

$("#move").click(function() {
  $(".has-submenu span").prependTo($(".has-submenu"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="has-submenu">
  Some text content  
  <span class="dropdown-menu-toggle">toggle</span>
  <span class="sub-arrow"> > </span>
</a>
<br>
<button id="move">Move spans</button>
4 年前
回复了 Barmar 创建的主题 » MySQL C API在子查询返回超过1行时出错

在您呼叫之前不会报告此错误 mysql_store_result .

ret = mysql_query(con, "SELECT 1, (SELECT user_id FROM users)");
printf("Ret is %d\n", ret); // -->  "Ret is 0"
MYSQL_RES *result = mysql_store_result(con);
if (result == NULL) {
    printf("Error is %s", mysql_error(con); // prints "Subquery returns more than 1 row"
}
3 年前
回复了 Barmar 创建的主题 » 我试图用python打印json文件中的信息

你必须在所有的星期和日子里循环。

for week in obj['weeks']:
    for day in week['days']:
        print(day['items'])
3 年前
回复了 Barmar 创建的主题 » Python:nested for循环被字典中的空值中断

检查一下 financials 定义为 if 陈述

if 'financials' in data[symbol]['financials']:
    row =  [
        data[symbol]['financials']['financials'][0]['fiscalDate'],
        symbol,
        data[symbol]['price'],
        data[symbol]['financials']['financials'][0]['cashFlow'],
        data[symbol]['financials']['financials'][0]['netIncome'],
        data[symbol]['financials']['financials'][0]['totalAssets'],
        data[symbol]['financials']['financials'][0]['totalLiabilities'],
        data[symbol]['financials']['financials'][0]['revenue'],
        data[symbol]['financials']['financials'][0]['ebit'],
        data[symbol]['stats']['ttmEPS'],
        data[symbol]['stats']['sharesOutstanding'],
        data[symbol]['advanced-stats']['profitMargin'],
        data[symbol]['advanced-stats']['totalRevenue'],
        data[symbol]['stats']['year2ChangePercent'],
        data[symbol]['stats']['year1ChangePercent'],
        data[symbol]['stats']['month6ChangePercent'],
        data[symbol]['stats']['month3ChangePercent'],
        data[symbol]['stats']['month1ChangePercent']
    ]
else:
    row = [
        'N/A',
        symbol,
        data[symbol]['price'],
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        data[symbol]['stats']['ttmEPS'],
        data[symbol]['stats']['sharesOutstanding'],
        data[symbol]['advanced-stats']['profitMargin'],
        data[symbol]['advanced-stats']['totalRevenue'],
        data[symbol]['stats']['year2ChangePercent'],
        data[symbol]['stats']['year1ChangePercent'],
        data[symbol]['stats']['month6ChangePercent'],
        data[symbol]['stats']['month3ChangePercent'],
        data[symbol]['stats']['month1ChangePercent']
    ]
financials_df = financials_df.append(pd.Series(row, index=my_columns), ignore_index=True)
3 年前
回复了 Barmar 创建的主题 » MySQL中Create Function语句存在问题

您有语法问题:

  1. 丢失的 ; 在每句话的结尾。
  2. 使用 SET 分配一个变量。
DELIMITER $$

create function [dbname].id_datasource (descval varchar(100))
returns varchar(10)
begin  
        declare datasource varchar(10) default '';
        SET datasource =   
            case 
                when descval like '%CLT%' then 'CLT'  
                when descval like '%PCB%' then 'PCB'  
                else 'NA' 
            end; 
        return datasource;
end
$$

DELIMITER ;

没有必要两者兼得 LIKE 'CLT%' LIKE '%CLT%' 因为任何匹配的 CLT% 也会匹配 %CLT% .

3 年前
回复了 Barmar 创建的主题 » PHP通过逗号从mysql中提取geojson

不要通过连接或回显字符串来创建JSON。创建一个包含所有数据的数组,然后使用 json_encode() .

因为表列包含 JSON ,在将其推送到结果数组之前,需要对其进行解码。否则它将被编码两次。

$sql = "SELECT * FROM `polygons` ORDER BY id";

$result = mysqli_query($dbcon, $sql);

$check = mysqli_num_rows($result);
if($check > 0){
    $array = ['type' => 'FeatureCollection', 'features' => []];
    while($data= mysqli_fetch_assoc($result)){
        $array['features'][] = json_decode($data['geojson'], true);
    }
    echo json_encode($array);
}
3 年前
回复了 Barmar 创建的主题 » Python/SQL:存储序列

你可以用 CASE SQL中的表达式,使用 BETWEEN 操作人员

SELECT
    CASE
        WHEN stop_id BETWEEN 9022001001281071 AND 9022001001281079 THEN 'Red line'
        WHEN stop_id BETWEEN 9022001001209996 AND 9022001001221005 THEN 'Blue line'
        WHEN stop_id BETWEEN 9022001001282307 AND 9022001001282314 THEN 'Yellow line'
        ELSE 'Extra Line'
    END AS line

注意 之间 首先需要较小的数字,所以我颠倒了你的站点ID的顺序。

5 年前
回复了 Barmar 创建的主题 » 如何在mysql中插入二进制值

你可以用 bit-value literal

INSERT INTO mytable (number) VALUES (b'00000010');
or
INSERT INTO mytable (number) VALUES (0b00000010)
5 年前
回复了 Barmar 创建的主题 » MySQL LEFT JOIN-如何处理记录与PHP不匹配的情况

可以在SQL中使用 IFNULL() .

$query = "SELECT MAX(unit.unit_pk) AS unit_pk,
       GROUP_CONCAT(CONCAT('<strong>',unit.unit_code,': </strong>', unit_outcome.unit_outcome) SEPARATOR '|') unit_outcomes,
       MAX(program_outcome.program_outcome) program_outcome,
       GROUP_CONCAT(unit_outcome.unit_outcome_pk) unit_outcome_pks, 
       program_outcome.program_outcome_pk,
       IFNULL(program_outcome.program_outcome, 'No matching program outcome.') AS program_outcome
FROM unit
LEFT JOIN unit_unit_outcome_lookup
    ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
LEFT JOIN unit_outcome
    ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
LEFT JOIN program_outcome_unit_outcome_lookup
    ON program_outcome_unit_outcome_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk
LEFT JOIN program_outcome
    ON program_outcome.program_outcome_pk = program_outcome_unit_outcome_lookup.program_outcome_fk
GROUP BY program_outcome_pk ORDER BY cast(program_outcome as unsigned) ASC";
5 年前
回复了 Barmar 创建的主题 » Mysql使用CONCAT和两个列创建视图

更改使用的现有视图的步骤 ALTER VIEW .

, ,不是 AND .

ALTER VIEW STRANKEPView AS (
    SELECT *, CONCAT('P-',strp_ID) AS strp_nas_br,
              CONCAT('A',strp_aa,'.') AS strp_aa_nas_br
    FROM STRANKEP 
);

使用是没有意义的 COALESCE() 只有一个论点,所以我把它从视图中删除了。目的 合并() 如果参数是 NULL

5 年前
回复了 Barmar 创建的主题 » 从PHP到MySQL bind_param()bool错误

您需要获取查询的结果。

$result = $conn->query("SELECT LAST_INSERT_ID();");
$row = $result->fetch_row();
$last = $row[0];
if ($last == "") {
    $index = 0;
} else {
    $index = $last + 1;
}

$last = $conn->insert_id;

另一个问题是 key

$stmt = $conn->prepare("INSERT INTO Users (`key`, userIP, date) VALUES (?, ?, ?)");

添加另一个循环。

$.getJSON('test.json', function(data) {
  $.each(data, function(i, d) {
    $.each(d.user.products, function () {
      $("table").append($("<tr>").append(
        $("<td>").addClass("Title").text(this.stock),
      ));
    });
  });
});
5 年前
回复了 Barmar 创建的主题 » 在mysql中,我可以只使用别名将sum添加到另一个sum中吗

不,不能在同一查询中引用列别名。您必须将其设为子查询。

SELECT id, answerA, answerB, answerC, (answerA + answerM + answerD) AS total
FROM (
    select 
        t1.id,
        sum(t2.answ = t1.answ) as answerA,
        sum(t3.answ = t1.answ) as answerM,
        sum(t4.answ = t1.answ) as answerD,
        sum(answerA + answerM + answerD) as total
    from t1
    left join t2 on t2.id = t1.t2fk
    left join t3 on t3.id = t1.t3fk
    left join t4 on t4.id = t1.t4fk
    GROUP BY t1.id
) AS subquery

或者你可以写一个等价的表达式。

select 
    t1.id,
    sum(t2.answ = t1.answ) as answerA,
    sum(t3.answ = t1.answ) as answerM,
    sum(t4.answ = t1.answ) as answerD,
    sum(t1.answ IN (t2.answ, t3.answ, t4.answ)) as total
from t1
left join t2 on t2.id = t1.t2fk
left join t3 on t3.id = t1.t3fk
left join t4 on t4.id = t1.t4fk
GROUP BY t1.id
5 年前
回复了 Barmar 创建的主题 » 压缩if循环python

如果'word'在'minor_words'中,请加入'minor_words'

word if word in minor_words 意思是如果 word 是在 minor_words 单词 (这是来自 title

else word.capitalize() 意思是如果 单词 小词 ,我们加入大写的单词。

为什么会有 =''

小词 参数。在上一个示例中,您只使用一个参数调用函数:

title_case('the quick brown fox')

title_case('the quick brown fox', '')

如果没有默认值,您将得到一个错误,即没有提供足够的参数。

5 年前
回复了 Barmar 创建的主题 » 从MYSQL数据PHP定义var

你在重新定义变量 websiteVars 每次循环。

您应该保留创建数组的原始循环 $json_array

var websiteVars = <?php echo json_encode($json_array); ?>;
6 年前
回复了 Barmar 创建的主题 » MySQL数据库列的时间格式不可识别

它看起来像一个Unix时间戳乘以1000(即以毫秒而不是秒为单位)。这类时间戳在JavaScript中使用。

使用 FROM_UNIXTIME(created_time/1000) 将其转换为 DATETIME

mysql> select from_unixtime(1543476095000/1000);
+-----------------------------------+
| from_unixtime(1543476095000/1000) |
+-----------------------------------+
| 2018-11-29 01:21:35               |
+-----------------------------------+

使用 1000 * UNIX_TIMESTAMP(datetime value) 转换 日期时间

5 年前
回复了 Barmar 创建的主题 » jQuery使用$(选择器)预处理多个div

el.prepend 应该是 $(el).prepend . el 是一个DOM元素,所以您调用本机 prepend() 方法;它将字符串参数视为文本节点,而不是HTML。

$(el) 创建引用元素的jQuery对象。jQuery prepend() 方法解析HTML。

$('.dash').each((i, el) => {
  console.log(el);
  $(el).prepend('<div class="digit"><div class="top" style="display: none;">0</div><div class="bottom" style="display: block;">0</div></div>');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dash">
</div>
5 年前
回复了 Barmar 创建的主题 » 如何在python中循环遍历大型嵌套列表?

使用嵌套循环。

for l1 in geojson['geometry_coordinates']:
    for l2 in l1:
        for l3 in l2:
            lon.append(l3[0])
            lat.append(l3[1])
5 年前
回复了 Barmar 创建的主题 » Python搜索2d数组并返回if found和index found

不要压平二维列表。使用嵌套循环 enumerate() 所以你可以得到索引。

def find_in_2d(lists, value):
    for i, l in enumerate(lists):
        for j, item in enumerate(l):
            if item == value:
                return i, j
    return None, None

i, j = find_in_2d(assets, element.get("asset")
if i is not None:
    print("found updating")
    asset[i][j] = new_value
6 年前
回复了 Barmar 创建的主题 » MySQL:对整个表应用按查询分组

连接两个表并按两列分组。

SELECT cr.register_id, cr.number, COUNT(*) AS cnt
FROM tbl_cross AS cr
JOIN tbl_register as r ON cr.register_id = r.id
WHERE r.collection_id = 56
GROUP BY register_id, number
HAVING cnt > 1

你可以用 HAVING 若要筛选出不重复项,不需要子查询。

5 年前
回复了 Barmar 创建的主题 » JQuery:使用setInterval以随机秒数显示文本

使用 setTimeout() 运行下一个迭代,而不是 setInterval() ,每次随机计算超时时间。

(function() {
  var timesRun = 0;
  var runLimit = 10;

  i = 0;

  function updateCounter() {
    if (timesRun < runLimit) {
      var timeout = 2000 * Math.random() + 1000; // random timeout from 1000 to 3000
      setTimeout(function() {
        $('#changing-number').fadeOut(function() {
          $(this).html(timesRun).fadeIn();
        });
        timesRun++;
        updateCounter();
      }, timeout);
    }
  }
  updateCounter();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<span id="changing-number">0</span> out of 10 numbers have been displayed.
6 年前
回复了 Barmar 创建的主题 » 更新时出现MySQL错误1157,但是我在where子句中使用主键

仅仅使用键列是不够的,您必须以允许使用索引来查找行的方式使用它。从 documentation :

如果优化器决定不对键列使用索引,则UPDATE和DELETE语句可能在安全更新模式下产生错误,即使在WHERE子句中指定了键。

因为你在测试 BINARY ip_ip 而不仅仅是 ip_ip 它本身不能使用索引,所以您会得到错误。

你能用一个函数来转换 INET6_ATON() varbinary ,而不是使用 BINARY 专栏的接线员然后它应该能够使用索引,并且不会出现错误。

UPDATE ip 
SET 
    ip_countryCode = 'GB',
    ip_countryName = 'United Kingdom',
    ip_city = 'London' 

WHERE ip_ip BETWEEN CAST(INET6_ATON('2.57.77.0') AS BINARY(16)) AND 
                    CAST(INET6_ATON('2.57.77.255') AS BINARY(16);
6 年前
回复了 Barmar 创建的主题 » 线程中的python socket recv

你必须通过 listen 函数到 threading.Thread() 是的。在主线程中调用函数,等待它完成,然后传递它的返回值(即 None ,因为函数从不返回任何内容)。

t2 = threading.Thread(target = listen)
6 年前
回复了 Barmar 创建的主题 » mysql在一列上匹配重复项,而在另一列上只匹配不同项

添加 GROUP BY A.Name, A.Score 到最后,你只能得到一行的名字和分数的每个组合。

如果你只想在同一个部门有两个不同的分数时给他们看,用 COUNT(DISTINCT Score) 而不是 COUNT(*) 是的。

SELECT A.UserID, A.DeptID, A.Name, A.Score
FROM User AS A
INNER JOIN (
    SELECT Name, DeptID
    FROM User
    GROUP BY Name, DeptID
    HAVING COUNT(DISTINCT Score) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID
GROUP BY A.Name, A.Score

第一, import_csv 不应该将列表包装到另一个列表中,它应该只返回行列表。

def import_csv(csv_file):
    name_entries = []
    with open(csv_file) as csvfile:
        reader = csv.reader(csvfile)
        return list(reader)

其次, exclude_entries 不需要使用 csv ,在导入数据时已使用,并且 name_entries 是行的列表。

第三,您应该只匹配包含电子邮件地址的list元素。

你可以用 filter() 过滤列表,而不是循环。

def exclude_regex_users(name_entries):
    r = re.compile(r'\w+\+\d+@trellis\.law')
    pulled_names = filter(lambda row: r.match(row[6]) or r.match(row[9]), name_entries)

    print(pulled_names)
5 年前
回复了 Barmar 创建的主题 » 使用join mysql时字段列表中的未知列

子查询没有返回 campaign_code 列。此外,还需要使用子查询的别名。

SELECT pm.*, cp.campaign_code
FROM dmspro_mys_product_master AS pm
INNER JOIN (
    SELECT DISTINCT product_id, campaign_code
    FROM dmspro_mys_campaign_product) AS cp
ON cp.product_id = pm.product_id
5 年前
回复了 Barmar 创建的主题 » 使用newline和linux mail命令通过pythons子进程发送邮件

你需要把身体和主题用引号引起来。如果你用F字串就容易多了

cmd  = f"echo '{body}' | mail -s '{subject}' -r '{fromAddr}' '{toAddr}'"

注意,您需要确保在任何参数中都没有引号字符——确保密码中不允许使用单引号。