我正在尝试编写一个非常基本的脚本,它将使用一个输入文件名,只需计数文件中的行数,并将其打印到CMD。--我在运行它时得到的是文件中实际行数的两倍。
import sys
filename = sys.argv[-1]
with open(filename,) as f:
LineCount = len(f.readlines())
print(LineCount)
input("Press Enter to close...")文本文件是208行长,我得到417。这里是文件的样子。从现在开始就会重复。
Asset Name In Point Description
Zach And Jenv4 00:00:13:11
Zach And Jenv4 00:00:14:54
Zach And Jenv4 00:00:16:37
Zach And Jenv4 00:00:18:20
Zach And Jenv4 00:00:20:03
Zach And Jenv4 00:00:21:45
Zach And Jenv4 00:00:23:28
Zach And Jenv4 00:00:25:11
Zach And Jenv4 00:00:26:54
Zach And Jenv4 00:00:28:36
Zach And Jenv4 00:00:30:20
Zach And Jenv4 00:00:32:03
Zach And Jenv4 00:00:33:45
Zach And Jenv4 00:00:35:28
Zach And Jenv4 00:00:37:11
Zach And Jenv4 00:00:38:54
Zach And Jenv4 00:00:40:37
Zach And Jenv4 00:00:42:20
Zach And Jenv4 00:00:44:03
Zach And Jenv4 00:00:45:44
Zach And Jenv4 00:00:47:28
Zach And Jenv4 00:00:49:11
Zach And Jenv4 00:00:50:54 发布于 2022-08-12 21:32:46
这里有一个可能的解释,但是OP应该查看f.readlines()内容来确定。
该文件具有\r\r\n行终止,open的默认操作是在读取时将\r、\n和\r\n分别转换为换行符,以便\r\r\n被翻译为\n\n。在打开用于在Windows上写入的文件时,生成具有以下行终止的文件的一种方法将使用不带记录在案 newlines=''参数的记录在案的newlines='':
import csv
# Create "bad" file
with open('test.csv','w') as f: # should have newline='' as a parameter as well
r = csv.writer(f)
r.writerow(['a','b','c'])
r.writerow([1,2,3])
r.writerow([4,5,6])
# Read file as OP did
with open('test.csv') as f:
data = f.readlines()
print(len(data))
print(data)输出:
6
['a,b,c\n', '\n', '1,2,3\n', '\n', '4,5,6\n', '\n']将newline=''参数添加到open中
3
['a,b,c\n', '1,2,3\n', '4,5,6\n']在Excel、记事本或Notepad++中打开CSV文件,您将看到相同的双换行问题,但从命令行转储不会:
C:\>type test.csv
a,b,c
1,2,3
4,5,6十六进制编辑器将显示\r\r\n (十六进制中的0D 0D 0A):

https://stackoverflow.com/questions/73338111
复制相似问题