在本文中,我们将详细介绍在python中从两个字符串创建变量名的各个方面,并为您提供关于python把两个字符串变量合在一起的相关解答,同时,我们也将为您带来关于Python3从列表中创建变量名并添加
在本文中,我们将详细介绍在python中从两个字符串创建变量名的各个方面,并为您提供关于python把两个字符串变量合在一起的相关解答,同时,我们也将为您带来关于Python 3 从列表中创建变量名并添加后缀、Python Tkinter:为列表框中的每个字符串创建一个变量?、python 动态创建变量 获取变量名、Python-如何在Python中从字符串中提取数字?的有用知识。
本文目录一览:- 在python中从两个字符串创建变量名(python把两个字符串变量合在一起)
- Python 3 从列表中创建变量名并添加后缀
- Python Tkinter:为列表框中的每个字符串创建一个变量?
- python 动态创建变量 获取变量名
- Python-如何在Python中从字符串中提取数字?
在python中从两个字符串创建变量名(python把两个字符串变量合在一起)
我正在寻找从Python中的两个字符串创建一个变量名,例如:
a = "column_number"
b = "_url1"
然后能够获得一个"column_number_url1"
我可以使用的变量名。
我知道这通常不是一个好主意-
有很多帖子都提到了为什么这是个坏主意,创建多个变量-我主要希望能够这是因为这些都是在代码的其他位置定义的变量,并且想要一种简单的方法来重新访问它们(即,而不是创建数千个唯一的变量,我同意使用字典等会更好)。
。
据我所知,我发现的其他帖子中的答案都是执行此操作的所有其他方法,而不是如何从两个字符串创建变量名。
Python 3 从列表中创建变量名并添加后缀
如何解决Python 3 从列表中创建变量名并添加后缀?
我想使用列表中的名称创建一个 Pandas 数据框,然后在其末尾附加“_df”,但我似乎有两个问题。下面是我的代码。
read_csv = [''apple'',''orange'',''bananna'']
for f in read_csv:
print(''DEBUG 7: Value of f inside the loop: '',f)
##!!! ERROR HERE - We have reassigned the csv file to f
##!!! ERROR HERE - f Now contains contents of f.csv(e.g. apple.csv)
f = pd.read_csv(f + ''.csv'')
##!!! ERROR HERE - Fix above error and the spice shall flow.
#print(''DEBUG 8: Inside read_csv \n'',f)
for 循环运行并读入列表“apple”中的第一项并将其分配给 f。 我们进入循环。第一个打印语句 DEBUG 7 将 f 的值返回为“apple”。到目前为止一切顺利。
接下来,我们运行到 pd.read_csv,这是我的第一个问题所在。如何将“_df”附加到 f?我在这里阅读了一些答案并尝试了它们,但它没有按我预期的那样工作。我想让循环运行并为 apple_df、orange_df 和 bananna_df 创建一个新的数据框。但我们可以回到那个话题。
我在这里遇到的第二个错误是“ValueError:错误的项目数通过 8,放置意味着 1”CSV 文件有 8 列,并且被分配给 f 而不是数据框名称。 我一生都无法弄清楚正在发生的事情来实现这一目标。嗯,我可以。如果我修复了 apple_df 问题,我相信数据帧会在 csv 文件中正常读取。
仍在学习中,感谢所有帮助。
谢谢
汤姆
解决方法
使用 locals()
创建局部变量(apple_df、orange_df、...)
read_csv = [''apple'',''orange'',''bananna'']
for f in read_csv:
locals()[f"{f}_df"] = pd.read_csv(f"{f}.csv")
>>> type(apple_df)
pandas.core.frame.DataFrame
,
ValueError: 错误的项目数传递了 8,放置意味着 1
您收到该错误是因为您无法将 DataFrame 分配给 f
变量,该变量是该循环中的一个字符串。您必须将其存储到新变量中,例如 df
df = pd.read_csv(f + ''.csv'')
如果您想通过 f
和 "_df"
创建新变量,您需要使用 exec
exec(f + "_df" + " = pd.read_csv(f + ''.csv'')")
Python Tkinter:为列表框中的每个字符串创建一个变量?
如何解决Python Tkinter:为列表框中的每个字符串创建一个变量??
我(几乎)是一个糟糕的程序员处女,所以请对我放轻松。
这是我第二次尝试制作程序,但结果证明这有点超出我的能力范围,恐怕。在尝试解决这个问题很长时间后,我请求您的帮助。
我基本上是在做一个待办事项列表,但希望它有更多的功能,而不仅仅是一个无聊的列表。
我在脑海中的想象是,用户将任务添加到条目小部件中,然后该小部件将显示在列表框中。然后列表框中的每个字符串都有一个与之关联的值(我需要对我希望程序具有的功能进行一些计算)。 所以我想我想要的是 ListBox 中的每个字符串都成为一个变量,然后与该变量关联我想要一个值。
我会尽力向您展示:
这里我添加了我想成为新变量的字符串
然后我从下拉菜单中指定一个数字。我希望这个数字是上一步中变量/字符串的值。
我真的希望你们中的一个人能以一种(最好)不需要我对事情做太多改变的方式引导我走向正确的方向。事情对我来说仍然很棘手,我已经很难浏览代码了。 目的很简单,我想对与每个任务相关联的(希望)即将成为的值进行一些计算。 如果你们有胆量,请提前致谢!
相关代码在这里:
import tkinter.messageBox # Import the messageBox module
import pickle # Module to save to .dat
import tkinter as tk
root = tk.Tk() #
root.title(''SmaTodo'') # Name of the program/window
def new_task():
global entry_task
global task_window
task_window = Toplevel(root)
task_window.title(''Add a new task'')
task_label = tk.Label(task_window,text = ''Title your task concisely:'',justify=''center'')
task_label.pack()
# Entry for tasks in new window
entry_task = tkinter.Entry(task_window,width=50,justify=''center'')
entry_task.pack()
# Add task button in new window
button_add_task = tkinter.Button(task_window,text=''Add task'',width=42,command=lambda: [add_task(),impact()])
button_add_task.pack()
def add_task():
global task
global impact_window
task = entry_task.get() # we get the task from entry_task and we get the input from the entry_task type-field with .get()
if task != '''': # If textBox inputfield is NOT empty do this:
listBox_tasks.insert(tkinter.END,task)
entry_task.delete(0,tkinter.END) # Slet hvad der står i inputfeltet fra første bogstav til sidste (0,tkinter.END)
task_window.destroy()
else:
tkinter.messageBox.showwarning(title=''Whoops'',message=''You must enter a task'')
task_window.destroy()
def delete_task():
try:
task_index = listBox_tasks.curselection()[0]
listBox_tasks.delete(task_index)
except:
tkinter.messageBox.showwarning(title=''Oops'',message=''You must select a task to delete'')
def save_tasks():
tasks = listBox_tasks.get(0,listBox_tasks.size())
pickle.dump(tasks,open(''tasks.dat'',''wb''))
def prioritize_tasks():
pass
# Create UI
frame_tasks = tkinter.Frame(root)
frame_tasks.pack()
scrollbar_tasks = tkinter.Scrollbar(frame_tasks)
scrollbar_tasks.pack(side=tkinter.RIGHT,fill=tkinter.Y)
listBox_tasks = tkinter.ListBox(frame_tasks,height=10,justify=''center'') # tkinter.ListBox(where it should go,height=x,width=xx)
listBox_tasks.pack()
listBox_tasks.config(yscrollcommand=scrollbar_tasks.set)
scrollbar_tasks.config(command=listBox_tasks.yview)
try:
tasks = pickle.load(open(''tasks.dat'',''rb''))
listBox_tasks.delete(0,tkinter.END)
for task in tasks:
listBox_tasks.insert(tkinter.END,task)
except:
tkinter.messageBox.showwarning(title=''Phew'',message=''You have no tasks'')
# Add task button
button_new_task = tkinter.Button(root,text=''New task'',command=new_task)
button_new_task.pack()
button_delete_task = tkinter.Button(root,text=''Delete task'',command=delete_task)
button_delete_task.pack()
button_save_tasks = tkinter.Button(root,text=''Save tasks'',command=save_tasks)
button_save_tasks.pack()
button_prioritize_tasks = tkinter.Button(root,text=''Prioritize'',command=prioritize_tasks)
button_prioritize_tasks.pack()
root.mainloop()
解决方法
简单的方法是添加另一个 list
来存储影响值。您需要同步任务列表和影响列表。
以下是修改后的代码:
import pickle # Module to save to .dat
import tkinter as tk
from tkinter import messagebox
import random
TASKS_FILE = "tasks.dat"
task_impacts = [] # store impact of tasks
root = tk.Tk() #
root.title(''SmaToDo'') # Name of the program/window
def impact():
# assign random impact to new task
task_impacts.append(random.randint(1,11))
def new_task():
def add_task():
task = entry_task.get().strip()
if task:
listbox_tasks.insert(tk.END,task)
impact() # get the impact of the task
else:
messagebox.showwarning(title=''Whoops'',message=''You must enter a task'')
task_window.destroy()
task_window = tk.Toplevel(root)
task_window.title(''Add a new task'')
task_label = tk.Label(task_window,text = ''Title your task concisely:'',justify=''center'')
task_label.pack()
# Entry for tasks in new window
entry_task = tk.Entry(task_window,width=50,justify=''center'')
entry_task.pack()
# Add task button in new window
button_add_task = tk.Button(task_window,text=''Add task'',width=42,command=add_task)
button_add_task.pack()
def delete_task():
try:
task_index = listbox_tasks.curselection()[0]
listbox_tasks.delete(task_index)
task_impacts.pop(task_index) # remove corresponding impact value as well
except:
messagebox.showwarning(title=''Oops'',message=''You must select a task to delete'')
def load_tasks():
try:
with open(TASKS_FILE,''rb'') as f:
tasks = pickle.load(f)
listbox_tasks.delete(0,tk.END)
task_impacts.clear()
for task,impact in tasks:
listbox_tasks.insert(tk.END,task)
task_impacts.append(impact)
except:
messagebox.showwarning(title=''Phew'',message=''You have no tasks'')
def save_tasks():
tasks = zip(listbox_tasks.get(0,tk.END),task_impacts)
with open(TASKS_FILE,"wb") as f:
pickle.dump(tasks,f)
def prioritize_tasks():
print(list(zip(listbox_tasks.get(0,task_impacts)))
# Create UI
frame_tasks = tk.Frame(root)
frame_tasks.pack()
scrollbar_tasks = tk.Scrollbar(frame_tasks)
scrollbar_tasks.pack(side=tk.RIGHT,fill=tk.Y)
listbox_tasks = tk.Listbox(frame_tasks,height=10,justify=''center'') # tkinter.Listbox(where it should go,height=x,width=xx)
listbox_tasks.pack()
listbox_tasks.config(yscrollcommand=scrollbar_tasks.set)
scrollbar_tasks.config(command=listbox_tasks.yview)
# Add task button
button_new_task = tk.Button(root,text=''New task'',command=new_task)
button_new_task.pack()
button_delete_task = tk.Button(root,text=''Delete task'',command=delete_task)
button_delete_task.pack()
button_save_tasks = tk.Button(root,text=''Save tasks'',command=save_tasks)
button_save_tasks.pack()
button_prioritize_tasks = tk.Button(root,text=''Prioritize'',command=prioritize_tasks)
button_prioritize_tasks.pack()
load_tasks()
root.mainloop()
请注意,我有:
- 将
add_task()
函数移到new_task()
函数中以不使用全局变量 - 创建了缺失的
impact()
函数来为新任务分配一个随机影响值 - 在函数
load_tasks()
中移动了已保存任务的加载
更好的建议是使用 ttk.Treeview()
而不是 tk.Listbox()
,因为您可以使用 tags
或 text
选项将影响值与任务相关联{{ 1}}。
python 动态创建变量 获取变量名
参考链接:https://www.cnblogs.com/technologylife/p/9211324.html
参考链接(未)(使用inspect 获取变量名):https://blog.csdn.net/s740556472/article/details/80928849
更容易理解的(未):https://segmentfault.com/q/1010000000405232
问题:
为什么要那样获取变量名呢?明明都已经把变量名给敲出来了?
需求和要求:
动态产生的变量名应该是有规律的
动态创建
使用exec动态赋值
exec是python3里的内置函数,支持python代码的动态运行
这种方式就相当于是执行了语句“var1=1”
if __name__=="__main__": for i in range(5):#注意随意指定的5,可看为个数 exec(‘var{}={}‘.format(i,i)) # print (n0) print(var1,var2,var3)
#输出:
1,2,3
利用命名空间动态赋值
在Python的命名空间中,将变量名与值存储在字典中,
可以通过locals()
,globals()
函数分别获取局部命名空间和全局命名空间。
#命名空间动态赋值 if __name__=="__main__": names=locals()#关键点在这 for i in range(5):#注意随意指定的5,可看为个数 names[‘n‘+str(i)]=i # print (n0) for i in range(5): print(names[‘n‘+str(i)])这样其实也不算新奇吧?
在类中使用动态变量
python的类对象的属性储存在的__dict__
中。__dict__
是一个词典,键为属性名,值对应属性的值。
In [1]: class Test_class(object): ...: def __init__(self): ...: names = self.__dict__#其实和通过命名空间差不多 ...: for i in range(5): ...: names[‘n‘ + str(i)] = i ...: In [2]: t = Test_class() In [3]: print(t.n0,t.n1,t.n2,t.n3,t.n4) 0 1 2 3 4
调用
事实上,对于重复性的变量,我们一般不会这样调用变量,如:var0,var1,var3,var4....varN
,(即自己把变量名写出来)
利用exec函数
同样地,可以使用exec
调用变量
In [3]: for i in range(5): ...: exec(‘print(var{},end=" ")‘.format(i)) ...: 0 1 2 3 4
利用命名空间
因为命令空间的locals()
与globals()
均会返回一个字典,利用字典的get
方法获取变量的值
In [4]: names = locals() In [5]: for i in range(5): ...: print(names.get(‘var‘ + str(i)),end=‘ ‘)
#或者
print(names[‘var‘+str(i)])
0 1 2 3 4
Python-如何在Python中从字符串中提取数字?
如何解决Python-如何在Python中从字符串中提取数字??
如果只想提取正整数,请尝试以下操作:
>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]
我认为这比正则表达式示例更好,原因有三点。首先,你不需要其他模块;其次,它更具可读性,因为你无需解析regex
迷你语言;第三,它更快(因此可能更pythonic
):
python -m timeit -s "str = ''h3110 23 cat 444.4 rabbit 11 2 dog'' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop
python -m timeit -s "import re" "str = ''h3110 23 cat 444.4 rabbit 11 2 dog'' * 1000" "re.findall(''\\b\\d+\\b'', str)"
100 loops, best of 3: 5.66 msec per loop
这将无法识别浮点数,负整数或十六进制格式的整数。如果你不能接受这些限制,则可以通过以下亭亭玉立的答案解决问题。
解决方法
我将提取字符串中包含的所有数字。哪个更适合pur
例:
line = "hello 12 hi 89"
结果:
[12,89]
关于在python中从两个字符串创建变量名和python把两个字符串变量合在一起的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Python 3 从列表中创建变量名并添加后缀、Python Tkinter:为列表框中的每个字符串创建一个变量?、python 动态创建变量 获取变量名、Python-如何在Python中从字符串中提取数字?的相关信息,请在本站寻找。
在这篇文章中,我们将带领您了解从Shell脚本向Python传递参数的全貌,包括shell调用python并传递参数的相关情况。同时,我们还将为您介绍有关bash – 如何将stdin从shell脚本重定向到shell脚本中的命令?、go执行python/shell脚本、perl 、shell、python之shell脚本入门、Python + C/C++ 嵌入式编程:Qt向Python传递数组的知识,以帮助您更好地理解这个主题。
本文目录一览:- 从Shell脚本向Python传递参数(shell调用python并传递参数)
- bash – 如何将stdin从shell脚本重定向到shell脚本中的命令?
- go执行python/shell脚本
- perl 、shell、python之shell脚本入门
- Python + C/C++ 嵌入式编程:Qt向Python传递数组
从Shell脚本向Python传递参数(shell调用python并传递参数)
我写了一个小的shell脚本,如下所示:
cd models/syntaxnet
var1=$(jq --raw-output '.["avl_text"]' | syntaxnet/demo.sh)
echo $var1
python /home/sree/python_code1.py $var1
我的python_code1.py
样子是这样的:
import sys
data = sys.argv[1]
print "In python code"
print data
print type(data)
现在,我的shell脚本中的echo $ var1的输出正是我想要看到的:
1 Check _ VERB VB _ 0 ROOT _ _ 2 out _ PRT RP _ 1 prt _ _ 3 this _ DET DT _ 4
det _ _ 4 video _ NOUN NN _ 1 dobj _ _ 5 about _ ADP IN _ 4 prep _ _ 6
Northwest _ NOUN NNP _ 7 nn _ _ 7 Arkansas _ NOUN NNP _ 5 pobj _ _ 8 - _ .,_
7 punct _ _ 9 https _ X ADD _ 7 appos _ _
但是print data
python代码中的输出仅为1
。即参数的第一个字母。
为什么会这样呢?我想将整个字符串传递给python代码。
bash – 如何将stdin从shell脚本重定向到shell脚本中的命令?
我想替换
find . -type f | $JAVA_HOME/bin/java com.domain.BatchProcess
同
find . -type f | ./batch.sh
解决方法
$JAVA_HOME/bin/java com.domain.BatchProcess
期待来自stdin的输入,然后将其放入脚本中并运行第二个命令将起作用.
go执行python/shell脚本
一、背景
项目的后台是golang, 但是一个子模块是python写好了的,为了能够快速使用上,打算用golang调用python。但是从长远的角度来看,在服务内部,跨语言,跨进程,最好使用RPC的方式。 本文主要讲解如何通过go来调用python脚本或者本地shell脚本,并获取脚本的输出结果。
二、用法
执行python有两种常见的方法:一种是直接执行python,一种是通过执行shell脚本来执行python。
2.1 直接执行python
详见参考2
demo1: 先写好要执行的python文件, fib.py
# fib.py
def fib(n):
if n <= 2:
return 1
return fib(n-1) + fib(n-2)
demo2: 写go,调用python模块以及函数,然后执行
func main() {
m := python.PyImport_ImportModule("sys")
if m == nil {
fmt.Println("import error")
return
}
path := m.GetAttrString("path")
if path == nil {
fmt.Println("get path error")
return
}
//加入当前目录,空串表示当前目录
currentDir := python.PyString_FromString("")
python.PyList_Insert(path, 0, currentDir)
m = python.PyImport_ImportModule("fib") //加载python的模块,文件名
if m == nil {
fmt.Println("import error")
return
}
fib := m.GetAttrString("fib")//加载python的方法
if fib == nil {
fmt.Println("get fib error")
return
}
out := fib.CallFunction(python.PyInt_FromLong(10))//调用python的方法,并传参
if out == nil {
fmt.Println("call fib error")
return
}
fmt.Printf("fib(%d)=%d\n", 10, python.PyInt_AsLong(out))
}
异常场景
Package python-2.7 was not found in the pkg-config search path
解决方法:
执行以下命令:
pkg-config --list-all | grep python
如果结果为空,说明包配置里没有python的配置,可以通过以下方式解决:
# centos
yum install python-devel
# ubuntu
apt-get install python-dev
2.2 通过调用shell间接执行python
demo1:
func main() {
cmd := exec.Command("ls", "-lah")
out, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
fmt.Printf("combined out:\n%s\n", string(out))
demo2:
func main() {
cmd := exec.Command("ls", "-lah")
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
fmt.Printf("out:\n%s\nerr:\n%s\n", outStr, errStr)
上面是通过exec.Command的方式调用shell命令或者脚本,demo1通过cmd.CombineOutput的方式获取进程的输出以及错误信息,demo2通过重定向到标准输出,标准错误从而获取。这两种方法因为封装的比较好,操作比较简单。 下面讲一下通过开启一个新的进程来运行的方式
demo3: startProcess调用, 详见参考4
const (
_LOG_FILE = "out.log"
)
func readLines(path string) ([]string, int, error) {
file, err := os.Open(path)
if err != nil {
return nil,0, err
}
defer file.Close()
var lines []string
linecount :=0
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
linecount++
}
return lines,linecount,scanner.Err()
}
func StartProcessExecShell() {
cmdToRun := "./test.sh"
//cmdToRun := "/path/to/someCommand"
args := []string{" ", " "}
procAttr := new(os.ProcAttr)
//打开一个 *File
stdOut, _ := os.OpenFile(_LOG_FILE, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
procAttr.Files = []*os.File{os.Stdin, stdOut, os.Stderr}
process, err := os.StartProcess(cmdToRun, args, procAttr);
//fmt.Printf("ERROR Unable to run %s: %s\n", cmdToRun, err.Error())
//go os.StartProcess(cmdToRun, args, procAttr)
if err != nil{
fmt.Printf("ERROR Unable to run %s: %s\n", cmdToRun, err.Error())
return
}
fmt.Printf("%s running as pid %d\n", cmdToRun, process.Pid)
process.Wait()
outputStr, _, err := readLines("./out.log")
if err != nil {
//log.Fatalf("error: %v", err)
fmt.Println("error = ", err)
}
fmt.Println("final result = ",outputStr)
}
简单讲解一下上面的代码, os.StartProcess开启一个进程去执行传入的命令, 它的输出可以指定输出到文件,也可以指定到标准输出(demo中所示的是指定输出到本地的文件out.log),最后在主进程里调用process.Wait()等待子进程处理完,然后打印输出。网上大部分博客都没有讲解如何获取os.StartProcess的输出,大部分只是打印一下进程id(Pid)。
执行shell遇到Exec format error
检查shell 脚本的正确格式是否如下:
#! /bin/bash
...
三、总结
1.跨进程,不同语言,最好还是通过rpc的方式去调用,go是静态语言,python是动态语言,可以通过go-python包来实现go直接调用python的方式,但是不优雅,也不好调试,不好拓展,同时也拖慢了go的性能;
2.go执行shell脚本一般有两种方式,exec.Command和os.StartProcess,其中cmd的方式比较方便获取子进程的结果
四、参考
https://studygolang.com/articles/11128
https://zhuanlan.zhihu.com/p/33445304
https://colobu.com/2017/06/19/advanced-command-execution-in-Go-with-os-exec/
http://lierhua.top/2019/02/03/golang%E5%88%9B%E5%BB%BA%E8%BF%9B%E7%A8%8BStartProcess/
进程原理
perl 、shell、python之shell脚本入门
shell是操作linux的基本,是必须学的。学shell就是学linux命令。
perl有强大的正则表达式支持,对于文本处理非常强悍,玩linux不得不学。
python作用一种面向对象的,能作为linux脚本的语言,学好之后能帮你很好地完成工作。
shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。 shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能。
总括,shell是linux命令集的概称,是属于命令行的人机界面
shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。
到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到/tmp/目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到/root/目录下;4)删除当前目录下所有的文件。简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
Shell脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务计划定时去执行某一个shell脚本实现我们想要需求。这对于linux系统管理员来说是一件非常值得自豪的事情。现在的139邮箱很好用,发邮件的同时还可以发一条邮件通知的短信给用户,利用这点,我们就可以在我们的linux服务器上部署监控的shell脚本,比如网卡流量有异常了或者服务器web服务器停止了就可以发一封邮件给管理员,同时发送给管理员一个报警短信这样可以让我们及时的知道服务器出问题了。
有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护。
【shell脚本的基本结构以及如何执行】
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,在前面讲过的。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是笔者不建议省略。因为随着你工作时间的增加,你写的shell脚本也会越来越多,如果有一天你回头查看你写的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。该脚本再往下面则为要运行的命令了。
Shell脚本的执行很简单,直接”sh filename “ 即可,另外你还可以这样执行
默认我们用vim编辑的文档是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’./filename’ 执行这个脚本了。另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。
该shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。其实在shell脚本中date使用率非常高。有几个选项笔者常常在shell脚本中用到:
%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%s表示秒
注意%y和%Y的区别。
-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。
另外星期几也是常用的
【shell脚本中的变量】
在shell脚本中使用变量显得我们的脚本更加专业更像是一门语言,开个玩笑,变量的作用当然不是为了专业。如果你写了一个长达1000行的shell脚本,并且脚本中出现了某一个命令或者路径几百次。突然你觉得路径不对想换一下,那岂不是要更改几百次?你固然可以使用批量替换的命令,但是也是很麻烦,并且脚本显得臃肿了很多。变量的作用就是用来解决这个问题的。
在test2.sh中使用到了反引号,你是否还记得它的作用?’d’和’d1’在脚本中作为变量出现,定义变量的格式为 “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号,这跟前面讲的在shell中自定义变量是一致的。下面看看脚本执行结果吧。
下面我们用shell计算两个数的和。
数学计算要用’[ ]’括起来并且外头要带一个’$’。脚本结果为:
Shell脚本还可以和用户交互。
这就用到了read命令了,它可以从标准输入获得变量的值,后跟变量名。”read x”表示x变量的值需要用户通过键盘输入得到。脚本执行过程如下:
我们不妨加上-x选项再来看看这个执行过程:
在test4.sh中还有更加简洁的方式。
read -p 选项类似echo的作用。执行如下:
你有没有用过这样的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其实就是一个shell脚本,为什么后面可以跟一个”restart”? 这里就涉及到了shell脚本的预设变量。实际上,shell脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。不妨笔者写一个脚本,你就会明白了。
执行过程如下:
在脚本中,你会不会奇怪,哪里来的$1和$2,这其实就是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。
执行结果想必你也猜到了吧。
【shell脚本中的逻辑判断】
如果你学过C或者其他语言,相信你不会对if 陌生,在shell脚本中我们同样可以使用if逻辑判断。在shell中if判断的基本语法为:
1)不带else
if 判断语句; then
command
fi
在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可。执行结果为:
2)带有else
if 判断语句 ; then
command
else
command
fi
执行结果为:
3)带有elif
if 判断语句一 ; then
command
elif 判断语句二; then
command
else
command
fi
这里的 && 表示“并且”的意思,当然你也可以使用 || 表示“或者”,执行结果:
以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>,<,= 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。
再看看if中使用 && 和 ||的情况。
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为: if [ -e filename ] ; then
在shell 脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是case了。具体格式为:
case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
*)
command
;;
esac
上面的结构中,不限制value的个数,*则代表除了上面的value外的其他值。下面笔者写一个判断输入数值是奇数或者偶数的脚本。
$a 的值或为1或为0,执行结果为:
也可以看一下执行过程:
case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了,你不妨去查看一下。
【shell脚本中的循环】
Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的。常用到的循环有for循环和while循环。下面就分别介绍一下两种循环的结构。
脚本中的seq 1 5 表示从1到5的一个序列。你可以直接运行这个命令试下。脚本执行结果为:
通过这个脚本就可以看到for循环的基本结构 :
for 变量名 in 循环的条件; do
command
done
循环的条件那一部分也可以写成这样的形式,中间用空格隔开即可。你也可以试试,for i in `ls`; do echo $i; done 和 for i in `cat test.txt`; do echo $i; done
再来看看这个while循环,基本格式为:
while 条件; do
command
done
脚本的执行结果为:
另外你可以把循环条件忽略掉,笔者常常这样写监控脚本。
while :; do
command
done
【shell脚本中的函数】
如果你学过开发,肯定知道函数的作用。如果你是刚刚接触到这个概念的话,也没有关系,其实很好理解的。函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。
fun.sh 中的sum() 为自定义的函数,在shell脚本中要用
function 函数名() {
command
}
这样的格式去定义函数。
上个脚本执行过程如下:
有一点笔者要提醒你一下,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。
Shell脚本大体上就介绍这么多了,笔者所举的例子都是最基础的,所以即使你把所有例子完全掌握也不代表你的shell脚本编写能力有多么好。所以剩下的日子里你尽量要多练习,多写脚本,你写的脚本越多,你的能力就越强。希望你能够找专门介绍shell脚本的书籍深入的去研究一下它。随后笔者将给你留几个shell脚本的练习题,你最好不要偷懒。
1. 编写shell脚本,计算1-100的和;
2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;
3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
4. 编写shell脚本,批量建立用户user_00,user_01,…,user_100并且所有用户同属于users组;
5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;
6. 编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255,0<n2<255,0<n3<255,0<n4<255)。
以下为练习题答案:
1. #! /bin/bash
sum=0
for i in `seq 1 100`; do
sum=$[$i+$sum]
done
echo $sum
2. #! /bin/bash
n=0
while [ $n -lt "1" ]; do
read -p "Please input a number,it must greater than "1":" n
done
sum=0
for i in `seq 1 $n`; do
sum=$[$i+$sum]
done
echo $sum
3. #! /bin/bash
for f in `ls /root/`; do
if [ -d $f ] ; then
cp -r $f /tmp/
fi
done
4. #! /bin/bash
groupadd users
for i in `seq 0 9`; do
useradd -g users user_0$i
done
for j in `seq 10 100`; do
useradd -g users user_$j
done
5. #! /bin/bash
awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt
sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt
awk '$1>10 {print $2}' /tmp/n2.txt
6. #! /bin/bash
checkip() {
if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}$' ; then
a=`echo $1 | awk -F. '{print $1}'`
b=`echo $1 | awk -F. '{print $2}'`
c=`echo $1 | awk -F. '{print $3}'`
d=`echo $1 | awk -F. '{print $4}'`
for n in $a $b $c $d; do
if [ $n -ge 255 ] || [ $n -le 0 ]; then
echo "the number of the IP should less than 255 and greate than 0"
return 2
fi
done
else
echo "The IP you input is something wrong,the format is like 192.168.100.1"
return 1
fi
}
rs=1
while [ $rs -gt 0 ]; do
read -p "Please input the ip:" ip
checkip $ip
rs=`echo $?`
done
echo "The IP is right!"
Python + C/C++ 嵌入式编程:Qt向Python传递数组
编程环境Qt5.7.1 MSVC版,VS2013,python3.7.1,我使用Qt像python传递字节数组,Qt和python代码如下,当多次点击按钮多次调用(第二次调用时)python程序时,提示程序异常结束。
Qt程序:
INCLUDEPATH +=D:/Python3.7.3/include
INCLUDEPATH += D:/Python3.7.3/Lib/site-packages/numpy/core/include
LIBS += -LD:/Python3.7.3/libs/ -lpython37
int init_numpy()
{
import_array();
}
void MainWindow::on_ButtonNumpy_clicked()
{
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
init_numpy();
if (!Py_IsInitialized())
{
printf("初始化失败!");
return ;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(''./'')");//这一步很重要,修改Python路径
PyObject pModule = PyImport_ImportModule("demo2");//这里是要调用的文件名hello.py
PyObject pDict = PyModule_GetDict(pModule);
if (pModule == NULL)
{
printf("Can''t open python file\n");
return ;
}
//PyObject pFunc = PyObject_GetAttrString(pModule, "szSecTest");
double CArrays[3][3] = {{1.3, 2.4, 5.6}, {4.5, 7.8, 8.9}, {1.7, 0.4, 0.8}};
qDebug()<<"rrr";
npy_intp Dims[2] = {3, 3};
//生成包含这个多维数组的PyObject对象,使用PyArray_SimpleNewFromData函数,第一个参数2表示维度,第二个为维度数组Dims,第三个参数指出数组的类型,第四个参数为数组
PyObject PyArray = PyArray_SimpleNewFromData(2, Dims, NPY_DOUBLE, CArrays);
PyObject ArgArray = PyTuple_New(1);
PyTuple_SetItem(ArgArray, 0, PyArray);
PyObject pFunc = PyDict_GetItemString(pDict , "Test");//这里是要调用的函数名
// PyObject * pFunc = PyObject_GetAttrString(pModule , "Test");
if (!pFunc){
printf("Get function hello failed\n");
return ;
} PyObject *pRrturn = PyObject_CallObject(pFunc, ArgArray); qDebug()<<pRrturn; PyArray = NULL; ArgArray = NULL; pRrturn = NULL; pModule=NULL; pDict=NULL; Py_Finalize();
}
python程序:import numpy as np
def Test(test):
print (test.shape,test[0], test[1],test[2])
报错:
Starting F:\Qt\build-TestNumpy-Desktop_Qt_5_7_1_MSVC2013_32bit-Release\release\TestNumpy.exe...
rrr
(3, 3) [1.3 2.4 5.6] [4.5 7.8 8.9] [1.7 0.4 0.8]
0x66937c44
D:\搜狗输入法\SogouInput\Components\程序异常结束。
F:\Qt\build-TestNumpy-Desktop_Qt_5_7_1_MSVC2013_32bit-Release\release\TestNumpy.exe crashed.
今天关于从Shell脚本向Python传递参数和shell调用python并传递参数的分享就到这里,希望大家有所收获,若想了解更多关于bash – 如何将stdin从shell脚本重定向到shell脚本中的命令?、go执行python/shell脚本、perl 、shell、python之shell脚本入门、Python + C/C++ 嵌入式编程:Qt向Python传递数组等相关知识,可以在本站进行查询。
如果您想了解Python中是否有`string.split的相关知识,那么本文是一篇不可错过的文章,我们将对`的生成器版本?进行全面详尽的解释,并且为您提供关于C++ string split()和 replaceAll()、python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器、Python re.split()与split()、python split()vs rsplit()性能?的有价值的信息。
本文目录一览:- Python中是否有`string.split()`的生成器版本?(python有string类型吗)
- C++ string split()和 replaceAll()
- python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器
- Python re.split()与split()
- python split()vs rsplit()性能?
Python中是否有`string.split()`的生成器版本?(python有string类型吗)
string.split()
returns a list instance. Is there a version that returns a
generator
instead? Are there any reasons against having a generator version?
C++ string split()和 replaceAll()
下面是小编 jb51.cc 通过网络收集整理的代码片段。
小编小编现在分享给大家,也给大家做个参考。
#include "stdafx.h" #include <iostream> #include <string> #include <vector> using namespace std; vector<string> mySplit(const string& str,string sp_string) // split(),str 是要分割的string { vector<string> vecString; int sp_stringLen = sp_string.size(); int lastPosition = 0; int index = -1; while(-1 != (index=str.find(sp_string,lastPosition))) { vecString.push_back(str.substr(lastPosition,index - lastPosition)); lastPosition = index +sp_stringLen; } string lastStr = str.substr(lastPosition); if ( !lastStr.empty() ) { vecString.push_back(lastStr); } return vecString; } string myReplaceAll(const string& str,string org_str,string rep_str) // 把org_str 替换为rep_str; { vector<string> delimVec = mySplit(str,org_str); if (delimVec.size() <= 0) { cout<<"can not find"<<endl; return str; } string target(""); vector<string>::iterator it = delimVec.begin(); for (; it != delimVec.end(); ++it) { target = target + (*it)+ rep_str; } //target = target +(*it); return target; } // 把org_strVec中的string全部替换为rep_str; string myReplaceAll(const string& str,vector<string>& org_strVec,string rep_str) { vector<string>::iterator org_it = org_strVec.begin(); string org_str(""); string target = str; string strTarget = str; for (; org_it != org_strVec.end(); ++org_it) { org_str = *org_it; vector<string> delimVec = mySplit(strTarget,org_str); target = ""; if (delimVec.size() > 0) { vector<string>::iterator it = delimVec.begin(); for (;it != delimVec.end(); ++it) { target = target + (*it) +rep_str; } strTarget = target; } } return strTarget; } int _tmain(int argc,_TCHAR* argv[]) { string str = "ewrsdrtwrtsdfsdsdfrtfgsdfertgdffgertsdfsd"; string splitStr = "sd"; string replaceStr1 = "mmmm"; string replaceStr2 = "xxxx"; vector<string> strVec1 = mySplit(str,splitStr); for (vector<string>::iterator it = strVec1.begin(); it != strVec1.end(); ++it) { cout<< "!!! "<<*it<<endl; } string strX[] = {"wr","rt"}; vector<string> strVec2 (strX,strX + sizeof(strX)/sizeof(strX[0])); cout << strVec2[0]<<"13q3224"<<strVec2[1]<<endl; str = myReplaceAll(str,splitStr,replaceStr1); str = myReplaceAll(str,strVec2,replaceStr2); cout << str <<"~~~~~"<<endl; return 0; }
以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。
python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器
1. is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同
== 比较的是两个对象的内容是否相等
2.
with语句时用于对try except finally 的优化,让代码更加美观,
例如常用的开发文件的操作,用try except finally 实现:

f=open(''file_name'',''r'')
try:
r=f.read()
except:
pass
finally:
f.close()

打开文件的时候,为了能正常释放文件的句柄,都要加个try,然后再finally里把f close掉,但是这样的代码不美观,finally就像个尾巴,一直托在后面,尤其是当try里面的语句时几十行
用with的实现:
with open(''file_name'',''r'') as f:
r=f.read()
这条语句就好简洁很多,当with里面的语句产生异常的话,也会正常关闭文件
除了打开文件,with语句还可以用于哪些地方呢?
with只适用于上下文管理器的调用,除了文件外,with还支持 threading、decimal等模块,当然我们也可以自己定义可以给with调用的上下文管理器
在开发的过程中,会有很多对象在使用之后,是需要执行一条或多条语句来进行关闭,释放等操作的,例如上面说的的文件,还有数据库连接,锁的获取等,这些收尾的操作会让代码显得累赘,也会造成由于程序异常跳出后,没有执行到这些收尾操作,而导致一些系统的异常,还有就是很多程序员会忘记写上这些操作-_-!-_-!,为了避免这些错误的产生,with语句就被生产出来了。with语句的作用就是让程序员不用写这些收尾的代码,并且即使程序异常也会执行到这些代码(finally的作用)
3.gil
GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定
在Python多线程下,每个线程的执行方式:
1.获取GIL
2.执行代码直到sleep或者是python虚拟机将其挂起。
3.释放GIL
可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。
4.list是可变数组
truple是常量数组
5.python的值是参数传递还是引用传递
说传值或者传引用都不准确。非要安一个确切的叫法的话,叫传对象(call by object)
6.
Python 中的迭代器、生成器、装饰器
迭代器; 是什么:是一个抽象的概念,任何对象,如果它实现了next方法和iter方法,就是迭代器。
next方法要么返回迭代中的下一项,要么返回一个stapIteration异常,iter方法要返回一个迭代器对象,而它本身就是一个迭代器对象,所有返回自己本身。
作用:像我们提供一个中间人即迭代器帮助我们迭代遍历使用 for循环其实就实现了迭代器的功能,在遍历list,string,dict,tuple这些容器时,在 for语句对容器对象调用的iter()方法返回一个定义next()方法的迭代器对象,它在函数中逐个访问容器内的元素,next和iter都是python内置函数。
生成器: 是什么:生成器是一种特殊的迭代器,在函数中有yield关键字就可以说是生成器。 怎么用:调用next(),就会返回yield后面的值,生成器挂起,再次使用next就从上次停止的位置继续执行。 作用:延迟计算,一次返回一个结果。当我们需要结果的时候才会调用,而不是一次返回所有的结果。 也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。 创建方法:1.把列表生成式的[ ]改为()就是一个简单的列表生成器 2.使用yield关键字
生成器和迭代器的区别:生成器能做到迭代器能做到的所有事,因为自动创建iter方法和next方法,显的比较简洁,高效。使用生成器表达式比列表解析要节省内存(前者是需要的时候才调用next返回一个值,后者直接返回一个列表),自动抛出StopIteration异常
装饰器:在不改变已存在的对象的功能情况下添加额外的功能 def set_fun(func): call_fun(*arge,**kwargs): reurn func(*arge,**kwargs) return call_fun
Python re.split()与split()
在进行优化时,我发现内置的split()方法比re.split()快40%。
虚拟基准(可轻松复制粘贴):
import re, time, randomdef random_string(_len): letters = "ABC" return "".join([letters[random.randint(0,len(letters)-1)] for i in range(_len) ])r = random_string(2000000)pattern = re.compile(r"A")start = time.time()pattern.split(r)print "with re.split : ", time.time() - startstart = time.time()r.split("A")print "with built-in split : ", time.time() - start
为什么会有这种差异?
答案1
小编典典re.split
由于使用正则表达式会产生一些开销,因此 预期 速度会变慢。
当然,如果要在 常量 字符串上拆分,则使用毫无意义re.split()
。
python split()vs rsplit()性能?
我在python中有一个字符串。我想用maxsplit = 1
分隔符将其拆分,该分隔符非常接近字符串的结尾。
例如
a = "abcdefghijklmnopqrstuvwxyz,1".
a.split(",",1)
在性能方面会更好a.rsplit(",1)
吗?
关于Python中是否有`string.split和`的生成器版本?的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于C++ string split()和 replaceAll()、python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器、Python re.split()与split()、python split()vs rsplit()性能?的相关信息,请在本站寻找。
对于想了解“请求”对象没有属性“获取” Python错误的读者,本文将是一篇不可错过的文章,我们将详细介绍python报错对象没有属性,并且为您提供关于AttributeError:“ tuple”对象没有属性“ encode”-MySQLdb Python、AttributeError:“模块”对象没有属性“调用”:Python、AttributeError:使用Selenium和Python,“列表”对象没有属性“点击”、Python - 导出 to_cvs 时“NoneType”对象没有属性的有价值信息。
本文目录一览:- “请求”对象没有属性“获取” Python错误(python报错对象没有属性)
- AttributeError:“ tuple”对象没有属性“ encode”-MySQLdb Python
- AttributeError:“模块”对象没有属性“调用”:Python
- AttributeError:使用Selenium和Python,“列表”对象没有属性“点击”
- Python - 导出 to_cvs 时“NoneType”对象没有属性
“请求”对象没有属性“获取” Python错误(python报错对象没有属性)
我正在尝试在Python中获取url参数。
我正在使用此代码:
from flask import request,url_for,redirect
# ...
controller = request.get('controller')
但我收到此错误:
'Request' object has no attribute 'get'
有任何想法吗?
谢谢
AttributeError:“ tuple”对象没有属性“ encode”-MySQLdb Python
我正在用MySQL编写Python代码。
我的数据库架构如下:
-------------
| id | name |
-------------
| | |
| | |
以下是我的代码的一部分:
cursor = self.conn.cursor()
query = ("SELECT name FROM TABLENAME WHERE id = '%s'",(str(id.decode('unicode_escape').encode('ascii','utf-8'),)))
cursor.execute(query)
我正在通过URL传递ID。
并得到以下错误:
AttributeError:“元组”对象没有属性“ encode”
在查询中对ID的值进行硬编码时,会得到结果。但是由于某些原因,当我传递参数时它不起作用。
AttributeError:“模块”对象没有属性“调用”:Python
我是python的新手,不知道这里发生了什么。我尝试了很多搜索,但最终不得不在这里询问
我正在尝试学习执行以下简单命令的子流程:
import subprocess
subprocess.call(['ls'])
现在,当我运行程序时,出现此错误:
Traceback (most recent call last):
File "subprocess.py",line 1,in <module>
import subprocess
File "/task/subprocess.py",line 2,in <module>
subprocess.call(['ls'])
AttributeError: 'module' object has no attribute 'call'
AttributeError:使用Selenium和Python,“列表”对象没有属性“点击”
我想在默认设置为“季度”的页面上单击“年度”按钮。有两个基本上相同的链接,除了一个链接,data-
ptype="Annual"
所以我试图复制xpath来单击按钮(也尝试了其他选项,但没有一个起作用)。
但是,我得到了AttributeError: 'list' object has no attribute
'click'
。我读了很多类似的文章,但无法解决我的问题..因此,我认为必须调用/单击/执行javascript事件以某种方式不同。
from selenium import webdriver
link = 'https://www.investing.com/equities/apple-computer-inc-balance-sheet'
driver = webdriver.Firefox()
driver.get(link)
elm = driver.find_elements_by_xpath("/html/body/div[5]/section/div[8]/div[1]/a[1]").click()
html如下:
<ahref="javascript:void(0);" data-type="rf-type-button" data-ptype="Annual" data-pid="6408" data-rtype="BAL">..</a>
Python - 导出 to_cvs 时“NoneType”对象没有属性
如何解决Python - 导出 to_cvs 时“NoneType”对象没有属性?
以下不断返回“AttributeError:''nonetype''对象没有属性''to_csv''”。我正在尝试将使用 dropna() 后的新数据保存到新的 csv 文件中。
import pandas as pd
df = pd.read_csv(''C:/Users/Admin/Documents/Kiwisaver_sample(1).csv'')
df = print(df.dropna(subset=[''Manager Name'']))
df.to_csv(''C:/Users/Admin/Documents/Kiwisaver_sample(2).csv'')
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
我们今天的关于“请求”对象没有属性“获取” Python错误和python报错对象没有属性的分享已经告一段落,感谢您的关注,如果您想了解更多关于AttributeError:“ tuple”对象没有属性“ encode”-MySQLdb Python、AttributeError:“模块”对象没有属性“调用”:Python、AttributeError:使用Selenium和Python,“列表”对象没有属性“点击”、Python - 导出 to_cvs 时“NoneType”对象没有属性的相关信息,请在本站查询。
本文标签: