python逐行写入文件 - python逐行读取文件




在Python中,如何逐行读取文件到列表中? (20)

如何在Python中读取文件的每一行并将每行存储为列表中的元素?

我想逐行读取文件,并将每行添加到列表的末尾。


用Python 2 + 3读写文本文件; 适用于unicode

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Define data
lines = ['     A first string  ',
         'A unicode sample: €',
         'German: äöüß']

# Write text file
with open('file.txt', 'w') as fp:
    fp.write('\n'.join(lines))

# Read text file
with open('file.txt', 'r') as fp:
    read_lines = fp.readlines()
    read_lines = [line.rstrip('\n') for line in read_lines]

print(lines == read_lines)

注意事项:

  • with一个所谓的上下文管理器 。 它确保打开的文件再次关闭。
  • 所有这些简单地制作.strip().rstrip()解决方案都无法重现这些lines因为它们也会剥去空白区域。

通用文件结尾

.txt

更高级的文件写入/读取

  • CSV:超简单格式( 读写 )
  • JSON:写出人类可读的数据很棒; 非常常用( 读写 )
  • YAML:YAML是JSON的超集,但更易于阅读( 读取和写入 , 比较JSON和YAML )
  • pickle:一种Python序列化格式( 读写 )
  • MessagePackPython包 ):更紧凑的表示( 读写 )
  • HDF5Python包 ):很好的矩阵( 读写 )
  • XML:存在*叹*( write )

对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 阅读/写作表现
  • 紧凑(文件大小)

另请参阅: 比较数据序列化格式

如果您正在寻找制作配置文件的方式,您可能需要阅读我的简短文章Python配置文件


命令行版本

#!/bin/python3
import os
import sys
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
filename = dname + sys.argv[1]
arr = open(filename).read().split("\n") 
print(arr)

运行:

python3 somefile.py input_file_name.txt

最简单的方法来做到这一点

一个简单的方法是:

  1. 将整个文件作为字符串读取
  2. 逐行分割字符串

在一行中,这将给出:

lines = open('C:/path/file.txt').read().splitlines()

一个真正简单的方法:

with open(file) as g:
    stuff = g.readlines()

如果你想使它成为一个完整的程序,请在下面输入:

file = raw_input ("Enter EXACT file name: ")
with open(file) as g:
    stuff = g.readlines()
print (stuff)
exit = raw_input("Press enter when you are done.")

由于某些原因,它不能正确读取.py文件。


你可以打开你的文件阅读使用

file1 = open("filename","r")
# and for reading use
lines = file1.readlines()
file1.close()

列表行将包含所有行作为单独的元素,并且您可以使用lines["linenumber-1"]调用特定元素,因为python从0开始计数。


另一个选项是numpy.genfromtxt ,例如:

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")

这将使data成为NumPy数组,其行数与文件中的数量相同。


如果你不关心关闭文件,这个单行工作:

lines = open('file.txt').read().split("\n")

传统的方式:

fp = open('file.txt') # open file on read mode
lines = fp.read().split("\n") # create a list containing all lines
fp.close() # close file

使用(推荐):

with open('file.txt') as fp:
    lines = fp.read().split("\n")

如果你想\n纳入:

with open(fname) as f:
    content = f.readlines()

如果你不想\n包括:

with open(fname) as f:
    content = f.read().splitlines()


您可以通过以下代码轻松完成此操作:

lines = open(filePath).readlines()

我喜欢使用以下内容。 立即读取这些行。

contents = []
for line in open(filepath, 'r').readlines():
    contents.append(line.strip())

或者使用列表理解:

contents = [line.strip() for line in open(filepath, 'r').readlines()]

据我所知,Python没有一个本地数组数据结构。 但它确实支持列表数据结构,它比数组更容易使用。

array = [] #declaring a list with name '**array**'
with open(PATH,'r') as reader :
    for line in reader :
        array.append(line)

正如所建议的那样,您可以简单地执行以下操作:

with open('/your/path/file') as f:
    my_lines = f.readlines()

请注意,这种方法有两个缺点:

1)将所有行存储在内存中。 在一般情况下,这是一个非常糟糕的主意。 该文件可能非常大,并且可能会导致内存不足。 即使它不大,也只是浪费记忆。

2)这不允许在读取它们时处理每一行。 所以如果你在这之后处理你的线条,效率不高(需要两遍而不是一次)。

一般情况下更好的方法如下:

with open('/your/path/file') as f:
    for line in f:
        process(line)

您可以以任何方式定义您的过程功能。 例如:

def process(line):
    if 'save the world' in line.lower():
         superman.save_the_world()

Superman课程的实施仅作为你的练习)。

这将很好地适用于任何文件大小,并且只需1遍即可完成文件。 这通常是泛型解析器的工作原理。


用这个:

import pandas as pd
data = pd.read_csv(filename) # You can also add parameters such as header, sep, etc.
array = data.values

data是一种数据帧类型,并使用值来获得ndarray。 你也可以使用array.tolist()来获得一个列表。


请参阅输入和输出

with open('filename') as f:
    lines = f.readlines()

或剥离换行符:

lines = [line.rstrip('\n') for line in open('filename')]

编者按:Janus Troelsen的评论暗示,这个回答的原始whitespace-stripping命令line.strip()将删除所有前导和尾随空白,而不仅仅是尾随\n


这将从文件中产生一行“数组”。

lines = tuple(open(filename, 'r'))

这比必要更明确,但是做你想要的。

with open("file.txt", "r") as ins:
    array = []
    for line in ins:
        array.append(line)

通过对文件使用列表推导还有另外一个选项;

lines = [line.rstrip() for line in open('file.txt')]

这应该是更有效的方式,因为大部分工作都是在Python解释器中完成的。


lines = list(open("dict.lst", "r"))
linesSanitized = map(lambda each:each.strip("\n"), lines)
print linesSanitized

with open(fname) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content] 

我猜你的意思是list而不是数组。





readlines