学习Python艰难的方法示例15 Python shell问题

时间:2014-12-26 05:59:46

标签: python shell

正如标题所说,我遇到了通过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
我做错了什么?如果我离开的话,请你们其中一个人指出我正确的方向吗?

5 个答案:

答案 0 :(得分:1)

sys.argv是Python中的一个列表,其中包含传递给脚本的命令行参数。所以这通常在你运行python prog时使用。使用命令行,如:

python prog.py arg1 arg2

arg1列表中存在arg2argv。在REPL中没有传递参数,因此argv为空。这就是您不断获得ValueErrorNameError ...

的原因

至于打开文件,它类似于: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