私信  •  关注

tripleee

tripleee 最近创建的主题
tripleee 最近回复了
2 年前
回复了 tripleee 创建的主题 » 反复编辑python脚本文件[重复]

您可以从中的命令行轻松访问字符串参数 sys.argv (出于历史原因, sys.argv[0] 包含脚本本身的名称,所以忽略它。

import sys

for AA_seq in sys.argv[1:]:
    value={"V": 3.1,"Y":3.5,"W":4.7,"T" :5.3,"S":5.1,"P":3.7,
"F":4.7,"M":1.5,"K":8.9,"L":6,"I":4.3,"H":3.3,"G":7.1,
"E":7,"Q":5.4,"C":0.6,"D":7.6,"N":6,"R":8.7,"A":3.4}
    print("Total length of sequence", AA_seq, "is:", len(AA_seq))
    for i in AA_seq:
        sum+=value[i]
    print(AA_seq, "Total Score is :", sum)

你会注意到我添加了一个循环,这样你就可以在一次运行中处理多个序列。

接受来自命令行的输入使您能够使用shell的各种功能(制表符完成、历史记录、变量扩展等),以及从其他脚本以编程方式使用此脚本。

4 年前
回复了 tripleee 创建的主题 » 如何在Python脚本中将Perl修改的内容写入文件?

恐怕您的Perl脚本编写技能也有点有限。无论如何,这都很容易在Python中实现。

import re

new_dat_file = "14689_bondlength.prmfrm.dat"
new_csv_file = "14689_bondlength.prmfrm.csv"
with open(new_dat_file) as input, open(new_csv_file, 'w') as output:
    for line in input:
        line = line.rstrip('\n')
        line = re.sub(r'\\t\s+|\s+', ',', line)
        # line = line.replace(',FRAM', r'\\nFRAM')
        output.write(line + '\n')

\\t 是反斜杠和小写 t ,鉴于 \t 表示选项卡。

FRAM .

如果你真的,真的想用一个外部的过程,我会

import subprocess

with open(new_dat_file) as input, open(new_csv_file, 'w') as output:
    subprocess.run(['perl', '-p', '-e', 's/\\t\s+|\s+/,/g; s/,FRAM/\\nFRAM/g'],
    stidin=input, stdout=output, check=True)

也许和上面一样,切换到 perl -l

5 年前
回复了 tripleee 创建的主题 » python3通过分隔符将大文件拆分为小文件(不是大小、行)

如果输入文件很大,将整个文件读入内存,然后分割内存区域是非常低效的。请改为:

with open('test-file.yml', 'r') as myfile:
    opfile = None
    cntr = 1
    for line in myfile:
        if line == '-\n':
            if opfile is not None:
                opfile.close()
            opfile = open('{0}.md'.format(cntr),'w')
            cntr += 1
        opfile.write(line)
    opfile.close()

close 你打开的东西 with 上下文管理器;上下文管理器的目的就是为您解决这个问题。

4 年前
回复了 tripleee 创建的主题 » 检查输入python regex的有效性

表达 \.{3} 匹配三个文字点。想必你想要 \.[a-z]{3}$

对于主机名部分, [a-z] 显然不包括数字;尝试 [a-z0-9] .

这样做没有什么特别的好处 compile 在regex上你会立刻扔掉。

def is_email_valid(email):
  return re.match(r"[a-zA-Z0-9_-]+@[a-z0-9]+\.[a-z]{3}$", email)

如果您想接受子域(您可能应该接受),可以添加一个repeat,如 ([a-z0-9]+\.)+ 之后 @ ,在 [a-z]{3}$ .

对于许多有效的电子邮件地址,您的条件过于严格,将接受许多无效的电子邮件地址。一般来说,使用regex验证电子邮件地址是一个有缺陷的想法,特别是如果您的有效性标准完全是临时的。

不管怎样,这会因为不同的原因拒绝我的首选、备份和第三级电子邮件地址。

5 年前
回复了 tripleee 创建的主题 » Python:如何分离函数read file和显示用户输入

我是 猜测 你在找这样的东西。将CSV读入 dict 其中,每个键是一个大学名,值是一个联系人列表(作为字符串)。然后有一个单独的函数选择要从该dict打印的内容。

import csv
import logging

def read_university_contacts(filename):
    """
    Read CSV file into a dict and return it.
    """
    with open(filename, mode='r') as csv_file:
        csv_reader = csv.DictReader(csv_file)
        university_contacts = dict()
        for line_count, row in enumerate(csv_reader, 1):
           if line_count == 1:
                # Not sure why you have this, skip header?
                #continue
                pass
           university = row["UniversityName"]
           contact = row["ContactName"]
           if university not in university_contacts:
               university_contacts[university] = [contact]
           else:
               university_contacts[university].append(contact)
    # Use logging for diagnostics
    logging.info(f'Processed {line_count} lines')
    # Return the structure we read
    return university_contacts    

def main():
    logging.basicConfig(level=logging.INFO, format='%(module)s:%(asctime)s:%(message)s')
    contacts = read_university_contacts("List.txt")

    while True:
        try:
            print("1. University")
            print("2. Contact Name")
            choice = input()
            choice = int(choice)
            break
        except ValueError:
            logging.warning("Unexpected error.")

    # Don't compare to string; you converted to int() above
    if choice == 1:
        print(list(contacts.keys()))
    elif choice == 2:
        print(list(contacts.values()))
    else:
        raise ValueError("Invalid option selected")


if __name__ == "__main__":
    main()
4 年前
回复了 tripleee 创建的主题 » 不带打印的python打印

对…的呼唤 input() 包括 message 在它的提示下。

字符串的添加在python中连接它们。 "ab" + "cd" 生产 "abcd" 是的。同样地, message += "stuff" 添加 "stuff" 到变量早期值的末尾。如果是以前的空字符串, "" + "stuff" 生产简单 “东西” 是的。

操作员 += 是增量赋值; a += b a = a + b . (有些人也不喜欢较长的表达式,因为它在数学上是不可信的,除非至少有一个值是零;但是 = 在python的其他地方也没有数学语义。)

4 年前
回复了 tripleee 创建的主题 » 使用newline和linux mail命令通过pythons子进程发送邮件

你真的想避免各种引用巴尔马答案的问题。如果您的python足够新,您需要

send = subprocess.call(
    ['mail', '-s', subject, '-r', fromAddr, toAddr],
    input=body, text=True)

在Python3.7之前,您需要替换 text=True 更老,更不清楚的别名 universal_newlines=True . 这个 input 参数可能是在Python3.3中引入的。有关如何在较旧版本中执行类似操作的IDA以及更详细的讨论,请参见 Running Bash commands in Python

6 年前
回复了 tripleee 创建的主题 » 如何在python子进程中运行bash函数?[复制品]

建议的解决方案是 使用 定义功能的别名 唯一地 对于交互使用(甚至在那时,shell函数在许多方面都是优越的)。

将别名重构为一个独立的脚本,并像任何其他外部命令一样调用它。

更详细地说,如果你有

alias myalias='for x in foo bar baz; do
    frobnicate "$x"; done'

您可以通过将它转换为一个函数来改进它,这样它就不会污染您的全局命名空间

myalias () {
    local x
    for x in foo bar baz; do
        frobnicate "$x"
    done
}

或者把它保存为 /usr/local/bin/myalias chmod a+x /usr/local/bin/myalias 使之对每个人都可执行;

#!/bin/sh
for x in foo bar baz; do
    frobnicate "$x"
done

(这在子进程中运行,因此 x 脚本完成后就消失了,所以我们不需要 local )

(当然,如果 frobnicate 写得很好,也许你可以简化为 frobnicate foo bar baz 同样如此。

这是常见的常见问题。

5 年前
回复了 tripleee 创建的主题 » python文本处理:从单个单词中识别名词

你可以在单个片段上运行pos标记器,它的精确度会更低,但我想这已经是给定的了。

理想情况下,找到一个pos标记符,它可以显示所有可能的读数,以便以后在处理流程中消除语法歧义。这基本上就是从字典中挑选出所有可能的阅读材料(也许是有可能的),然后让你从中获取。

9 年前
回复了 tripleee 创建的主题 » 如何从python与终端通信?[复制品]

您可以删除 -e :

os.system("gnome-terminal 'sudo apt-get update'")
5 年前
回复了 tripleee 创建的主题 » 如何在同一个python程序中将python变量传递给bash代码?

在贝壳里玩耍看起来很尴尬,为什么不干脆:

def check_file_exists_in_hadoop(loc):
    path = "/somedirectory/inhadoop/" + loc
    res = subprocess.run(["hadoop", "fs", "-test", "-d", path])
    return res.returncode == 0

您可以执行为:

if check_file_exists_in_hadoop('foo.txt'):
    print("Yay!!!!")
else:
    print("Oh noes!!!!")

在类unix系统中执行/运行进程/程序时,它会收到一组参数(例如, sys.argv 在python中)。你可以用不同的方法来构造它们,但是把它们传递给 run 给你最直接的控制。当然可以使用shell来执行此操作,但仅启动shell来执行此操作似乎没有必要。假设这个参数列表只是python中字符串的列表,那么可以使用普通的list/string操作来构造所需的任何内容。

使用shell可能很有用,但正如gilles所说,您需要小心地清理/逃避您的输入,并不是每个人都喜欢 little bobby tables !

5 年前
回复了 tripleee 创建的主题 » android应用连接mysql数据库的登录状态验证

升级至React Native 0.58.5或更高版本。 他们有 includeSubdomain 在RN0.58.5的配置文件中。

ChangeLog

在RN0.58.5中,他们宣布 network_security_config 和他们的服务器域。网络安全配置允许应用程序允许来自特定域的明文通信。所以不需要付出额外的努力 android:usesCleartextTraffic="true" 在清单文件的应用程序标记中。升级rn版本后将自动解决此问题。