![](/img/trans.png)
[英]Counting the number of lines that special characters appear in a txt file from user input (Python 2.7)
[英]Counting the Number of Lines in a .txt file, getting double the expected result
我正在嘗試編寫一個非常基本的腳本,它將采用輸入文件名並簡單地計算文件中的行數,並將其打印到 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
這是一個可能的解釋,但 OP 應該查看f.readlines()
內容以確定。
該文件具有\r\r\n
行終止,並且open
的默認值是在讀取時將\r
、 \n
和\r\n
每個轉換為換行符,因此\r\r\n
被轉換為\n\n
。 生成具有這些行終止符的文件的一種方法是在打開文件以在 Windows 操作系統上寫入時使用沒有記錄的newlines=''
參數的 Python 的csv.writer
:
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)
Output:
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 或 Notepad++ 中打開 CSV 文件,您將看到相同的雙換行問題,但從命令行轉儲不會:
C:\>type test.csv
a,b,c
1,2,3
4,5,6
十六進制編輯器將顯示\r\r\n
( 0D 0D 0A
十六進制):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.