2017-02-03 13 views
1

Я совершенно не знаком с python, и я должен написать программу, которая может читать весь .txt-файл и печатать его. Файл - это статья на моем первом языке (норвежский) и длинный. У меня есть три версии, которые должны делать то же самое, но все получают ошибку. Я пытался в боте PyCharm и затмить с PyDev установлено, и я получаю те же ошибки на оба ...Как читать и печатать весь .txt-файл с помощью python?

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) 

Опять же, я новичок в Python , и я обыскал вокруг, но не нашел решения.

Моя следующая попытка была такова:

# -*- 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

Для 2-го подхода является самым простым, я буду придерживаться его.

Вы изложили содержание 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() или сделать питона сделать это автоматически:

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