2017-02-03 61 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