所以,我创建一个StringIO对象来将我的字符串视为一个文件:
>>> a = 'Me, you and them\n'
>>> import io
>>> f = io.StringIO(a)
>>> f.read(1)
'M'
Run Code Online (Sandbox Code Playgroud)
然后我继续关闭'文件':
>>> f.close()
>>> f.closed
True
Run Code Online (Sandbox Code Playgroud)
现在,当我再次尝试打开'文件'时,Python不允许我这样做:
>>> p = open(f)
Traceback (most recent call last):
File "<pyshell#166>", line 1, in <module>
p = open(f)
TypeError: invalid file: <_io.StringIO object at 0x0325D4E0>
Run Code Online (Sandbox Code Playgroud)
有没有办法'重新打开'一个封闭的StringIO对象?或者是否应该使用io.StringIO()方法再次声明?
谢谢!
使用sed指定行号时,它将执行指定范围内的指定操作.所以,
sed -n '5,10 p' < file
Run Code Online (Sandbox Code Playgroud)
将从文件中打印第5行到第10行.所以我的理解是,它扫描文件以找到与第一个指定参数(5)匹配的行号,并执行指定的操作,直到达到与第二个参数(10)匹配的行号.但是,当我颠倒范围时,即:
sed -n '10,5 p' < file
Run Code Online (Sandbox Code Playgroud)
它只打印文件中的第10行.那么,我对sed操作方式不正确的假设是什么?是什么原因导致第10行被打印,因为指定的"范围"甚至不是实际有效范围?
谢谢!
我有一个程序进行简单的回文检查,通过比较字符串的每一端,然后递归地执行原始字符串的子字符串.也就是说,我将str [0]与str [-1]进行比较,执行str [1,-1]并重复比较.我在逐步执行代码时发现的是,当我要求函数check_palin()返回1时,它返回None.我可以清楚地看到它'执行'返回语句,但是当我要求它返回1时它总是返回None.但是,它正确地返回0.返回True/False时会出现相同的行为.这是我的代码.我究竟做错了什么??
def check_palin(s):
global init
print("Init is %d" %(init))
if len(s) <= 1 :
if not init :
print("returning 1")
return True
else :
print("Please supply a string of atleast 2 characters! Exiting...\n")
print("returning 0")
return False
else :
init = 0
if first_word(s) == last_word(s) :
check_palin(middle(s))
else :
print("returning 0")
return False
def first_word(s) :
return s[0]
def last_word(s):
return s[-1]
def middle(s):
return s[1:-1]
init = 1
s = raw_input("Please enter a string")
print(check_palin(s)) …Run Code Online (Sandbox Code Playgroud)