Python:阅读模式。加载到列表(使用 for 循环)并在单独的代码块中使用 read() 方法
Python: read mode. Loading into lists (with a for loop) and using the read() method in a seperate code block
我正在测试此代码的多个场景,想了解 Python 出现这种情况的原因。 两种场景都是相同的代码,只是代码块的顺序相反。
#Peach is written in this .txt file
inputFile = open("C:\...\filename.txt", 'r')
场景 1:此代码正确打印列表,但最后打印 False,即使“Peach”在 .txt 文件中
#Loading into lists
myList = []
#For each line in the file
for line in inputFile:
#Add the line to myList, stripping out whitespace
myList.append(line.strip())
print(myList)
if "Peach" in inputFile.read():
print("Peach in .txt file?", True)
else:
print("Peach in .txt file?", False)
inputFile.close()
场景 2:相同的代码,不同的位置。正确打印 True 但会打印出一个空列表。
if "Peach" in inputFile.read():
print("Peach in .txt file?", True)
else:
print("Peach in .txt file?", False)
#Loading into lists
myList = []
#For each line in the file
for line in inputFile:
#Add the line to myList, stripping out whitespace
myList.append(line.strip())
print(myList)
inputFile.close()
一个文件对象只能读取一次。
在读取文件的时候,Python其实是用一个指针来遍历整个文件。使用“打开”时,指针默认设置为文件开头,读取后指针位于文件末尾。因此,当您再次访问文件 时,您将得到一个空字符串。
你可以试试这个方法:
with open("","r") as f:
data=f.read()
if data.find("Peach")>-1:
print("Peach found in .txt file")
else:
print("Peach not found in .txt file")
我们从 .txt
文件中读取文件和写入文本到数据中。我们在 data
中找到 "Peach"
。如果找到打印找到否则打印未找到。
或者,如果您想逐行列出,则:
with open("","r") as f:
data=f.readlines()
for dat in data:
if dat.find("Peach")>-1:
print("Peach found in .txt file")
break
else:
print("Peach not found in .txt file")
问题是您尝试从文件中读取数据两次
第一次:"Peach" in inputFile.read()
第二次:for line in inputFile:
但是在第一次读取之后,特殊的 "pointer"
(告知读取下一个数据的位置)位于文件末尾,下一次读取从文件末尾读取 - 但它什么也没读取。
您必须关闭文件并再次打开才能移动到开头。
inputFile = open(...)
# read all data from file
for line in inputFile:
# ... code ...
inputFile.close()
# ---
inputFile = open(...)
# read again all data from file
if "Peach" in inputFile.read():
# ... code ...
inputFile.close()
或者您必须使用inputFile.seek(0)
在下一次阅读之前移动到开头。
inputFile = open(...)
# read all data from file
for line in inputFile:
# ... code ...
inputFile.seek(0) # move to the beginning of file
# read again all data from file
if "Peach" in inputFile.read():
# ... code ...
inputFile.close()
或者你应该只读取一次数据并使用内存中的数据。
inputFile = open(...)
text = inputFile.read()
inputFile.close()
# use as list of lines
for line in text.splitlines():
# ... code ...
#myList = text.splitlines() # shorter
#myList = text.split("\n") # shorter
# use as full text
if "Peach" in text:
# ... code ...
inputFile.close()
Python read
函数将在读取操作后提升文件中的位置,在您的第一个代码示例中,您在 for 循环中迭代了内容,所以当您到达 if声明,读取位置已经在文件末尾,那里没有桃子!
在第二个示例中,您读取文件,将位置推进到文件末尾,因此当您遍历文件以构建列表时,read 没有任何可添加的内容。
在尝试第二个代码块之前将 inputFile.seek(0, 0)
重新定位到文件的开头!
在此处阅读有关读取行为的更多信息:https://pscustomobject.github.io/python/Python-Reset-Read-Write-Position/
我正在测试此代码的多个场景,想了解 Python 出现这种情况的原因。 两种场景都是相同的代码,只是代码块的顺序相反。
#Peach is written in this .txt file
inputFile = open("C:\...\filename.txt", 'r')
场景 1:此代码正确打印列表,但最后打印 False,即使“Peach”在 .txt 文件中
#Loading into lists
myList = []
#For each line in the file
for line in inputFile:
#Add the line to myList, stripping out whitespace
myList.append(line.strip())
print(myList)
if "Peach" in inputFile.read():
print("Peach in .txt file?", True)
else:
print("Peach in .txt file?", False)
inputFile.close()
场景 2:相同的代码,不同的位置。正确打印 True 但会打印出一个空列表。
if "Peach" in inputFile.read():
print("Peach in .txt file?", True)
else:
print("Peach in .txt file?", False)
#Loading into lists
myList = []
#For each line in the file
for line in inputFile:
#Add the line to myList, stripping out whitespace
myList.append(line.strip())
print(myList)
inputFile.close()
一个文件对象只能读取一次。 在读取文件的时候,Python其实是用一个指针来遍历整个文件。使用“打开”时,指针默认设置为文件开头,读取后指针位于文件末尾。因此,当您再次访问文件 时,您将得到一个空字符串。
你可以试试这个方法:
with open("","r") as f:
data=f.read()
if data.find("Peach")>-1:
print("Peach found in .txt file")
else:
print("Peach not found in .txt file")
我们从 .txt
文件中读取文件和写入文本到数据中。我们在 data
中找到 "Peach"
。如果找到打印找到否则打印未找到。
或者,如果您想逐行列出,则:
with open("","r") as f:
data=f.readlines()
for dat in data:
if dat.find("Peach")>-1:
print("Peach found in .txt file")
break
else:
print("Peach not found in .txt file")
问题是您尝试从文件中读取数据两次
第一次:"Peach" in inputFile.read()
第二次:for line in inputFile:
但是在第一次读取之后,特殊的 "pointer"
(告知读取下一个数据的位置)位于文件末尾,下一次读取从文件末尾读取 - 但它什么也没读取。
您必须关闭文件并再次打开才能移动到开头。
inputFile = open(...)
# read all data from file
for line in inputFile:
# ... code ...
inputFile.close()
# ---
inputFile = open(...)
# read again all data from file
if "Peach" in inputFile.read():
# ... code ...
inputFile.close()
或者您必须使用inputFile.seek(0)
在下一次阅读之前移动到开头。
inputFile = open(...)
# read all data from file
for line in inputFile:
# ... code ...
inputFile.seek(0) # move to the beginning of file
# read again all data from file
if "Peach" in inputFile.read():
# ... code ...
inputFile.close()
或者你应该只读取一次数据并使用内存中的数据。
inputFile = open(...)
text = inputFile.read()
inputFile.close()
# use as list of lines
for line in text.splitlines():
# ... code ...
#myList = text.splitlines() # shorter
#myList = text.split("\n") # shorter
# use as full text
if "Peach" in text:
# ... code ...
inputFile.close()
Python read
函数将在读取操作后提升文件中的位置,在您的第一个代码示例中,您在 for 循环中迭代了内容,所以当您到达 if声明,读取位置已经在文件末尾,那里没有桃子!
在第二个示例中,您读取文件,将位置推进到文件末尾,因此当您遍历文件以构建列表时,read 没有任何可添加的内容。
在尝试第二个代码块之前将 inputFile.seek(0, 0)
重新定位到文件的开头!
在此处阅读有关读取行为的更多信息:https://pscustomobject.github.io/python/Python-Reset-Read-Write-Position/