2017-02-03 96 views
1

我對python來說是全新的,我應該編寫一個能夠讀取整個.txt文件並打印出來的程序。該文件是我的第一語言(挪威語)的文章,並且很長。我有三個版本應該做同樣的事情,但都會出錯。我在BOT PyCharm嘗試和安裝PyDev的Eclipse和我得到兩個同樣的錯誤......如何使用python讀取和打印整個.txt文件?

from sys import argv 

import pip._vendor.distlib.compat 

script, dev = argv 

txt = open(dev) 

print("Here's your file %r:" % dev) 
print(txt.read()) 


print("Type the filename again:")h 
file_again = pip._vendor.distlib.compat.raw_input("> ") 

txt_again = open(file_again) 

print(txt_again.read()) 

但這得到錯誤:

Traceback (most recent call last): 
File "/Users/vebjornbergaplass/Documents/Python eclipse/oblig1/src/1A/1A.py", line 5, in <module> 
script, dev = argv 
ValueError: not enough values to unpack (expected 2, got 1) 

再說,我是新來的蟒蛇,我四處搜尋,但沒有找到解決辦法。

我的下一個嘗試是這樣的:

# -*- coding: utf-8 -*- 

import sys, traceback 

fr = open('dev.txt', 'r') 
text = fr.read() 
print(text) 

但這得到這些錯誤:

Traceback (most recent call last): 
    File "/Users/vebjornbergaplass/Documents/Python eclipse/oblig1/src/1A/v2.py", line 6, in <module> 
     text = fr.read() 

    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode 
    return codecs.ascii_decode(input, self.errors)[0] 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128) 

我不明白爲什麼我不能正常工作。

我的第三次嘗試是這樣的:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import argparse 
parser = argparse.ArgumentParser() 

parser.add_argument("dev.txt", help="dev.txt") 
args = parser.parse_args() 
if args.filename: 
    with open('dev.txt') as f: 
     for line in f: 
      name, _ = line.strip().split('\t') 
      print(name) 

這得到錯誤:

usage: v3.py [-h] dev.txt 
v3.py: error: the following arguments are required: dev.txt 

爲什麼這些不工作是值得歡迎的任何幫助。 預先感謝:D

+0

糾正過去的錯誤。 parser.add_argument()函數需要參數名稱。參數值由您的腳本的用戶給出。用1個參數調用腳本:python v3.py dev.txt –

回答

1

對於第二方法是最簡單的,我會堅持下去。

你說的dev.txt內容是挪威的,這意味着,它將包括非ASCII字符,如Æ,Ø,Å等Python解釋器是想告訴你:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128)它不能解釋字節0xC3 = 195 (decimal)爲一個ascii字符,它被限制在128個不同的字符範圍內。

我假設你正在使用UTF-8編碼的,但如果沒有,在第2行

# -*- coding: utf-8 -*- 

fr = open('dev.txt', 'r', encoding='utf-8') 
text = fr.read() 
print(text) 

更改參數如果你不知道你的編碼,就可以找到它通過您的編輯或use python to guess it

您的終端在未配置爲打印Unicode字符或正確映射它們時也可能導致錯誤。您可能需要查看this question and its answers.


操作文件後,建議關閉它。您可以手動做到這一點通過fr.close()或使Python自動做到這一點:

with open('dev.txt', 'r', encoding='utf-8') as fr: 
    # automatically closes fr when leaving this code-block 
1
file = open("File.txt", "r") 
a = str(file.read()) 

print(a) 

這是你在找什麼?

+0

這正是他在第二次嘗試時所做的,產生了一個'UnicodeDecodeError'。 – nitzel

0

例如:

open ("fileA.txt", "r") as fileA: 
    for line in fileA: 
     print(line); 
0

這是一個可能的解決方案:

f = open("textfile.txt", "r") 
lines = f.readlines() 
for line in lines: 
    print(line) 
f.close() 

保存它作爲例如myscript.py並執行:

python /path/to/myscript.py