2019-04-28 16:44:14 zyx_ly 阅读数 16180
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2336 人正在学习 去看看 阿勒拉哈

参考:

  1. Python中文件的读取和写入
  2. PYTHON将list或/dict对象写入txt/json文件
  3. python(如何将数据写入本地txt文本文件)
  4. python中文件写入TXT
  5. Python中将变量按行写入txt文本中
  6. python把变量写入txt文件。
  7. Python读写文件
  8. python文件操作
  9. Python之文件读写
  10. Python程序输出到文件中
  11. python把一个unicode字符串写入文件为什么会报错?

从文件中读取数据

读取整个文件

这里假设在当前目录下有一个文件名为’pi_digits.txt’的文本文件,里面的数据如下:

3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
with open('pi_digits.txt') as f: # 默认模式为‘r’,只读模式
    contents = f.read() # 读取文件全部内容
    print contents # 输出时在最后会多出一行(read()函数到达文件末会返回一个空字符,显示出空字符就是一个空行)
    print '------------'
    print  contents.rstrip() # rstrip()函数用于删除字符串末的空白
  • 1
  • 2
  • 3
  • 4
  • 5
3.1415926535
8979323846
2643383279

------------
3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

逐行读取

可以通过循环来实现逐行读取数据:

with open('pi_digits.txt') as f:
    for line1 in f:
        print line1 # 每行末尾会有一个换行符
    print '------------'
    for line2 in f:
        print line2.rstrip() # 此时文件已经读完,line2指向文本末尾,因此不会有输出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.1415926535

8979323846

2643383279

------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

读取文件时相当于有一个指针在记录读取的位置,数据读到哪,这个指针就指到哪边,继续读取数据时会从该位置继续读取,因此上面代码中第二个循环中输出为空。将上述代码稍加修改如下:

with open('pi_digits.txt') as f:
    for line1 in f:
        print line1
    print '------------'

with open('pi_digits.txt') as f: # 需要重新打开文本进行读取
    for line2 in f:
        print line2.rstrip() # 删除字符串末尾的空白
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.1415926535

8979323846

2643383279

------------
3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上述代码相当于第一次读取完后关闭该文件又重新打开进行读取。逐行读取数据也可以用readline()函数,如下:

with open('pi_digits.txt') as f: 
    # readline()每一次读取一行数据,并指向该行末尾
    line1 = f.readline() # 读取第一行数据(此时已经指向第一行末尾)
    line2 = f.readline() # 从上一次读取末尾开始读取(第二行)

    print line1.rstrip()
    print line2.rstrip()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3.1415926535
8979323846
  • 1
  • 2

有时候我们想要一次性读取全部数据并且按分开存储以便于后续的操作,当然用上面的循环可以实现,但python提供了更简单的方法readlines():

with open('pi_digits.txt') as f: 
    lines = f.readlines() # 读取文本中所有内容,并保存在一个列表中,列表中每一个元素对应一行数据
print lines # 每一行数据都包含了换行符

print '------------'
for line in lines:
    print line.rstrip()   
print '------------'
pi_str = '' # 初始化为空字符
for line in lines:
    pi_str += line.rstrip() #字符串连接
print pi_str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

['3.1415926535\n', '8979323846\n', '2643383279\n']
------------
3.1415926535
8979323846
2643383279
------------
3.141592653589793238462643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

写数据到文件

写数据有几种不同的模式,最常用的是w’, ‘a’, 分别表示擦除原有数据再写入和将数据写到原数据之后:

filename = 'write_data.txt'
with open(filename,'w') as f: # 如果filename不存在会自动创建, 'w'表示写数据,写之前会清空文件中的原有数据!
    f.write("I am Meringue.\n")
    f.write("I am now studying in NJTECH.\n")
  • 1
  • 2
  • 3
  • 4

此时会在当前路径下创建一个’write_data.txt’的文本文件,并向文件中写入数据如下:

I am Meringue.
I am now studying in NJTECH.
  • 1
  • 2

下面继续在该文件中加入新数据:

with open(filename,'a') as f: # 'a'表示append,即在原来文件内容后继续写数据(不清楚原有数据)
    f.write("I major in Machine learning and Computer vision.\n")
  • 1
  • 2

此时的文件内容为:

I am Meringue.
I am now studying in NJTECH.
I major in Machine learning and Computer vision.
  • 1
  • 2
  • 3
2018-11-26 17:57:20 u013555719 阅读数 1269
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2336 人正在学习 去看看 阿勒拉哈

python操作txt文件中数据教程[1]-使用python读写txt文件

觉得有用的话,欢迎一起讨论相互学习~Follow Me

  • 原始txt文件
  • 程序实现后结果

程序实现

filename = './test/test.txt'
contents = []
DNA_sequence = []

# 打开文本并将所有内容存入contents中
with open(filename, 'r') as f:
    for line in f.readlines():
        contents.append(line)
f.close()

# 对contents中的内容进行遍历
# 并将需要的数据存到list DNA_sequence中
for content in contents:  # 逐行遍历
    p = 0  #
    for bit in content:  # 对每行进行逐字遍历
        if bit == " ":  # 遇到空格时进行处理
            DNA_sequence.append(content[0:p])  # 将content中的0:p字段存入新列表new中,用于写入新的.txt中
            break  # 处理完一行以后跳出当前循环
        else:
            p = p + 1  # 如果bit不是空格,指针加1
# print(DNA_sequence)
"""
['AAACAAGGAACAAACGCACA', 'AAAGGACACAGTGAGAGACG', 'AGCCATTGTCGAGTCCGTTA', 'GTGGTCACTCCTCGCAAATT', 'TTCAACCATACAGGCCTCGT',
'CAAATGTGAGGATTCGGACG', 'CCGTGGTGAACTGGAGCGTT', 'Sum', 'AAAGGACACAGTGAGAGACG', 'AGCCATTGTCGAGTCCGTTA',
'CCACAACGCTCGAAGGCAAG', 'AAGTACAGCGGGCCAATAGC', 'CAAATGTGAGGATTCGGACG', 'GAGAACGTTGAGTGAGCGTG', 'GATGTTAAGTAGAGCAGAGG',
'Sum', 'AAACAAGGAACAAACGCACA', 'AAAGGACACAGTGAGAGACG', 'CCACAACGCTCGAAGGCAAG', 'AAGTACAGCGGGCCAAGATC',
'CTCAGAAGATCTCGATGGCT', 'AGCCATTGTCGAGTCCGTTA', 'TGCCGCAAACTACACACACG', 'Sum']
"""
# 由于list DNA_sequence中有不需要的字符串"Sum",将其从列表中去除
for var in DNA_sequence:
    if var == "Sum":
        DNA_sequence.remove(var)
# print(DNA_sequence)
"""
['AAACAAGGAACAAACGCACA', 'AAAGGACACAGTGAGAGACG', 'AGCCATTGTCGAGTCCGTTA', 'GTGGTCACTCCTCGCAAATT', 'TTCAACCATACAGGCCTCGT',
 'CAAATGTGAGGATTCGGACG', 'CCGTGGTGAACTGGAGCGTT', 'AAAGGACACAGTGAGAGACG', 'AGCCATTGTCGAGTCCGTTA', 'CCACAACGCTCGAAGGCAAG',
  'AAGTACAGCGGGCCAATAGC', 'CAAATGTGAGGATTCGGACG', 'GAGAACGTTGAGTGAGCGTG', 'GATGTTAAGTAGAGCAGAGG', 'AAACAAGGAACAAACGCACA'
  , 'AAAGGACACAGTGAGAGACG', 'CCACAACGCTCGAAGGCAAG', 'AAGTACAGCGGGCCAAGATC', 'CTCAGAAGATCTCGATGGCT',
  'AGCCATTGTCGAGTCCGTTA', 'TGCCGCAAACTACACACACG']
"""

# 以写的方式打开文件,如果文件不存在,就会自动创建,如果存在就会覆盖原文件
file_write_obj = open("./DNAlog.txt", 'w')

# 将DNA_sequence中的数据写入到DNAlog.txt文件中
for var in DNA_sequence:
    file_write_obj.writelines(var)
    file_write_obj.writelines('\n')

file_write_obj.close()

2018-04-25 14:12:39 HHTNAN 阅读数 1059
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2336 人正在学习 去看看 阿勒拉哈

python从mysql 数据库1迁移到数据库2(中间转化为dataframe),分批次写入
obj:从mysql 数据库1迁移到mysql 数据库2(中间转化为dataframe)
mysql 写入数据存在两种形式,create_engine速度快些 ,但批量数据时需要分批次写入数据某则报错

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
obj:从mysql 数据库1迁移到mysql 数据库2(中间转化为dataframe)
mysql 写入数据存在两种形式,create_engine速度快些 ,但批量数据时需要分批次写入数据某则报错

"""
import csv
import pymysql
import pandas as pd
from sqlalchemy import create_engine
#连接数据库
conn=pymysql.connect(
             host='127.0.0.1',
             port=3306,
             user='root',
             passwd='xxxxx',
             db='kmind',
             charset='utf8'
         )
sqldb="select * from  form_mongodb_sql_jd_list_final_mid_02"
pd_data=pd.read_sql(sqldb,conn)
#ser-sql
conn.close()
engine = create_engine('mysql+mysqlconnector://root:xxxxx@192.168.1.xxxx:3306/数据库',echo=False)

#数据分批次写入
a_int=len(pd_data)//100
b_remainder=len(pd_data)%100
for i  in range(a_int):
    # print(pd_data[i:i+1])
    print('{}---{}'.format(i*100,(i+1)*100))
    pd.io.sql.to_sql(pd_data[i*100:(i+1)*100],'pd_data2', engine,  if_exists='append')
print('{}---{}'.format((i+1)*100,(i+1)*100+b_remainder))
pd.io.sql.to_sql(pd_data[(i+1)*100:(i+1)*100+b_remainder],'pd_data2', engine,  if_exists='append')
微信号
2016-11-16 09:23:54 zhangleaimeiling 阅读数 3061
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2336 人正在学习 去看看 阿勒拉哈

一.读取.txt文件中的数据到张量中

说明:将data_x.txt和data_y.txt中的数据分别读取到x_data张量中

#!/usr/bin/python
# coding=utf-8

import numpy as np

# input data
file= open('data_x.txt')
x_data= np.loadtxt(file,unpack='true')
#y_data.shape = h,l  # 重塑张量为h行n列
file.close()

file = open('data_y.txt')
y_data = np.loadtxt(file,unpack='true')
#y_data.shape = h,l  # 重塑张量为h行n列
file.close()

二.将张量中的数据读取到文件中

#!/usr/bin/python
# coding=utf-8
import numpy as np

#将x_data张量中的数据读写到np_x.txt中
x_data = np.linspace(-2, 2, 400)[:, np.newaxis]
np.savetxt('np_x.txt',x_data)

#将y_data张量中的数据读写到np_y.txt中
noise = np.random.normal(0, 0.5, x_data.shape)
y_data = np.exp(x_data) - 0.5 + noise
np.savetxt('np_y.txt',y_data)
2017-09-16 10:14:49 zhaobig 阅读数 4436
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2336 人正在学习 去看看 阿勒拉哈
Python Scrapy爬虫数据写入操作

在我们写完一个爬虫项目,得到了一大堆的数据,为了以后的分析和使用,我们需要把我们得到的数据进行保存。保存数据的方式主要有:保存到数据库,保存到CSV文件,保存为JSON文件。
保存到数据库中分为同步和异步的方式:

一般小的数据,我们可以选择,同步保存数据库:

首先先准备好数据库文件和数据表

操作在pipelines.py文件中完成
将item写入数据库
import MySQLdb
class MysqlPipeine(object):

    def __init__(self):
        self.conn = MySQLdb.connect(
                    host = 'localhost',
                    # mysql默认端口号3306
                    port = 3306,
                    user = 'root',
                    passwd = '123456',
                    db = 'db_name',
                    use_unicode = True,
                    charset = 'utf8'
        )
        self.cursor = self.conn.cursor()
    
    
    # 处理item的函数
    def process_item(self, item, spider):
    
    # 准备sql语句
        sql = 'insert into table_name(字段名)VALUES (字段数据,即item对象)'
        self.cursor.execute(sql)
        self.conn.commit()
    
    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()

如果数据量较大,异步写入数据库会更高效:
同样操作在我们的pipelines文件中,但在操作之前,需要配置我们的setting文件,在其中添加我们的数据
# 自己配置一些项目信息
# 数据库配置
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASSWD = '123456'
MYSQL_CHARSET = 'utf8'
MYSQL_DBNAME = 'db_name'
然后在pipelines中进行我们异步写入数据库的操作:

# 将item写入数据库
import MySQLdb
class MysqlPipeine(object):

    def __init__(self):
        self.conn = MySQLdb.connect(
                host = 'localhost',
                # mysql默认端口号3306
                port = 3306,
                user = 'root',
                passwd = '123456',
                db = 'db_name',
                use_unicode = True,
                charset = 'utf8'
    )
        self.cursor = self.conn.cursor()

    # 处理item的函数
    def process_item(self, item, spider):
    # 准备sql语句
        sql = 'insert into table_name(字段名)VALUES (字段数据,即item对象)'
        self.cursor.execute(sql)
        self.conn.commit()


    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()
如果数据量较大,异步写入数据库会更高效:
同样操作在我们的pipelines文件中,但在操作之前,需要配置我们的setting文件,在其中添加我们的数据

# 自己配置一些项目信息
# 数据库配置

MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASSWD = '123456'
MYSQL_CHARSET = 'utf8'
MYSQL_DBNAME = 'db_name'
然后在pipelines中进行我们异步写入数据库的操作:

from twisted.enterprise import adbapi

from MySQLdb import cursors

class MysqlTwistedPipeline(object):
    @classmethod
    # 这个函数会自动调用
    def from_settings(cls, settings):
        # 准备好连接数据库需要的参数
        db_params = dict(
            host=settings["MYSQL_HOST"],
            port=settings["MYSQL_PORT"],
            user=settings["MYSQL_USER"],
            passwd=settings["MYSQL_PASSWD"],
            charset=settings["MYSQL_CHARSET"],
            db=settings["MYSQL_DBNAME"],
            use_unicode=True,
            # 指定游标类型
            cursorclass=cursors.DictCursor
        )
        # 创建连接池
        # 1.要连接的名称  2.连接需要的参数
        db_pool = adbapi.ConnectionPool('MySQLdb', **db_params)
        # 返回当前类的对象,并且把db_pool赋值给该类的对象
        return cls(db_pool)

    def __init__(self, db_pool):
        # 赋值
        self.db_pool = db_pool
        # 处理item函数

    def process_item(self, item, spider):
        # 把要处理的事件进行异步处理
        # 1.要处理的事件函数
        # 2.事件函数需要的参数
        query = self.db_pool.runInteraction(self.do_insert, item)
        # 执行sql出现错误信息
        query.addErrback(self.handle_error, item, spider)
        # 错误的原因

    def handle_error(self, failure, item, spider):
        print failure
    # 处理插入数据库的操作
    # cursor该函数是连接数据库的函数,并且放在异步去执行,cursor执行sql语句
    def do_insert(self, cursor, item):
        # 1.准备sql语句
        sql = 'insert into table_name(表中各个字段名)VALUES (各个字段对应的数据item)'
        # 2.用cursor游标执行sql
        cursor.execute(sql)

写入CSV文件的操作:
同样操作在我们的pipelines.py文件中进行
# 写入csv文件
import csv
import codecs
class SaveCSVFile(object):

    def __init__(self):
        file_handle = codecs.open('name.csv', 'w', encoding='utf-8')
        # 1. 创建csv文件
        self.csv = csv.writer(file_handle)
        self.csv.writerow(表头的信息)

    def process_item(self, item, spider):
        self.csv.writerow(表头信息所对应的每个item对象)
        return item

    def __del__(self):
        # 关闭文件
        self.file_handle.close()
写入json文件:
import json
class JsonPipeline(object):

    def __init__(self):
        self.file_handle = codecs.open('name.json', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        data = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(data)
        return item

    def __del__(self):
        # 关闭文件
        self.file_handle.close()

在我们完成pipelines中的函数重写后,一定要记得在setting文件中配置,以确保其能正常执行。


如果同时在pipelines中进行多种方式的写入的话,切记要在process_item函数中返回item,即return item
还有一种简单的保存csv / json文件的方法:
在编辑器命令行输入:scrapy crawl spider - o name.json / csv - s FEED_EXPROT_ENCODING = UTF8
FEED_EXPORT_ENCODING = UTF8指保证文件中的中文正常显示

没有更多推荐了,返回首页