[英]why does read().split("\n") result in an error even though it removes the "\n" from the list unlike readlines() and readlines() works
3
6
5
8
33
12
7
4
72
2
42
13
3
6
13
5
7
89
12
3
33
34
1
344
42
read()split("n") 出錯
Traceback (most recent call last):
File "main.py", line 12, in <module>
result = [int(number) for number in list1 if number in list2]
File "main.py", line 12, in <listcomp>
result = [int(number) for number in list1 if number in list2]
ValueError: invalid literal for int() with base 10: ''
Output for: 問題:為什么這段代碼可以工作,而其他代碼不能工作? 我想我必須從 list1 和 list2 中新創建的字符串中刪除“\n”,然后才能使用列表理解將其轉換為 integer,這就是我嘗試 read().split("\n" 的原因) 代碼部分首先刪除轉義字符。 代碼的 readlines() 部分能夠轉換包含“\n”的字符串沒有問題。 這是因為在使用 int() 轉義字符時會被忽略嗎?
with open("file1.txt","r") as file1:
#list1 = file1.readlines()
with open("file2.txt","r") as file2:
list2 = file2.readlines()
['3\n', '6\n', '5\n', '8\n', '33\n', '12\n', '7\n', '4\n', '72\n', '2\n', '42\n', '13\n']
['3\n', '6\n', '13\n', '5\n', '7\n', '89\n', '12\n', '3\n', '33\n', '34\n', '1\n', '344\n', '42\n']
[3, 6, 5, 33, 12, 7, 42, 13]
Python:
with open("file1.txt","r") as file1:
list1 = file1.read().split("\n")
with open("file2.txt","r") as file2:
list2 = file2.read().split("\n")
# with open("file1.txt","r") as file1:
#list1 = file1.readlines()
# with open("file2.txt","r") as file2:
#list2 = file2.readlines()
result = [int(number) for number in list1 if number in list2]
print(result)
有點不清楚你在問什么,但我會盡力回答為什么這兩行不等價以及為什么第二行會導致ValueError
。
file1.readlines()
file1.read().split("\n")
這個很簡單。 readlines
方法只是將文件轉換為字符串列表。 文件中的一行對應於列表中的一項。 文件中有 12 行,因此您會得到一個包含 12 個字符串的列表。
with open("file1.txt", "r") as file1:
print(file1.readlines())
# ['3', '6', '5', '8', '33', '12', '7', '4', '72', '2', '42', '13']
在這種情況下, read
方法將整個文件作為字符串返回。 這還包括您在原始帖子中提到的換行符。
with open("file1.txt", "r") as file1:
file1.read()
# '3\n6\n5\n8\n33\n12\n7\n4\n72\n2\n42\n13\n'
現在,當您對字符串使用split
方法時,它 Python 在分隔符的實例處拆分字符串並返回字符串的所有片段。 例如,如果我說"123".split("2")
那么我可以期望['1', '3']
被返回。 但是,當指定的分隔符位於字符串的末尾時,會發生什么不太直觀。 如果我說"123".split("3")
那么我可以期待['12', '']
。 因此,如果分隔符位於字符串的末尾或開頭, split
將在列表的末尾或開頭返回一個空字符串。
在file1
的情況下,字符串末尾有一個\n
分隔符,因此在拆分時您可以期待這樣的內容:
with open("file1.txt", "r") as file1:
file1.read().split('\n')
# ['3', '6', '5', '8', '33', '12', '7', '4', '72', '2', '42', '13', '']
因此,當您嘗試將列表中的最后一項 ( ''
) 轉換為int
時,您會得到ValueError: invalid literal for int() with base 10: ''
。
另一種選擇是splitlines
方法,它將在換行符處拆分,但刪除任何前導或尾隨空格。
with open("file1.txt", "r") as file1:
file1.read().splitlines()
# ['3', '6', '5', '8', '33', '12', '7', '4', '72', '2', '42', '13']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.