正如标题所说,我遇到了通过python shell运行命令的问题,更具体地说,我似乎无法弄清楚如何打开和阅读文件,就像它告诉我在研究中做的那样钻头。
这是我到目前为止所做的一切:
PS C:\Users\NikoSuave\Desktop\learn python the hard way\works in progress or finished> python
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import argv
>>> script, filename = argv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> txt = open(filename)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'filename' is not defined
>>> filename = argv
>>> script = argv
>>> txt = open(filename)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, list found
我做错了什么?如果我离开的话,请你们其中一个人指出我正确的方向吗?
答案 0 :(得分:1)
sys.argv
是Python中的一个列表,其中包含传递给脚本的命令行参数。所以这通常在你运行python prog时使用。使用命令行,如:
python prog.py arg1 arg2
arg1
列表中存在arg2
和argv
。在REPL中没有传递参数,因此argv
为空。这就是您不断获得ValueError
,NameError
...
至于打开文件,它类似于:file_object = open(filename, mode)
其中mode
可以是r, w, a, r+
(读,写,追加和读写)。一个例子是:
file = open("newfile.txt", "w")
file.write("hello world in the new file\n")
file.write("and another line\n")
file.close()
上面的代码打开newfile.txt
进行写入并添加显示的内容。最后关闭文件。阅读文件时可以使用类似的东西:
file = open("newfile.txt", "r")
print file.read()
这将读取文件newfile.txt
并打印内容。
答案 1 :(得分:0)
首先,我们打开带有字符串或定义字符串的文件。
>>> txt = open(filename)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'filename' is not defined
This is not how we open files with python, you need strings.
txt=open("filename.txt") #if is it a txt file
或
filename="filename.txt" #if its a .txt file
txt=open(filename)
在这个问题上:
>>> filename = argv
>>> script = argv
>>> txt = open(filename)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, list found
sys.argv返回列表,python抱怨需要字符串或缓冲区,而不是列表。所以你必须到达列表中的每个元素并将它们放到正确的位置。
答案 2 :(得分:0)
看起来你应该创建一个.py文件。然后使用参数运行该文件,该参数是另一个文本文件的名称。 sys.argv从命令行获取参数。
答案 3 :(得分:0)
您应该在控制台中调用该文件。例如,在example.py中保存以下代码
from sys import argv
print "Argument 1 is " , argv[1]
print "Argument 2 is " , argv[2]
print "Argument 3 is " , argv[3]
并使用
python example.py one two three
将打印
Argument 1 is one
Argument 2 is two
Argument 3 is three
答案 4 :(得分:0)
假设您有一个模块file1.py
from sys import argv
print 'argv:-', argv
file_name = argv[1]
print 'file_name:-', file_name
with open(file_name, 'w') as fp:
# your file operations
并且您希望通过命令提示符从用户获取file_name。
$ python file1.py myfile.txt
argv:- ['file1.py', 'myfile.txt']
file_name:- myfile.txt
因此argv[0]
保存模块名称本身,argv[1]
保存用户传递的文件名或路径,即。 myfile.txt
。