天道酬勤,学无止境

将CSV文件的内容加载到数组而不打开文件[关闭](Load contents of CSV file to array without opening file [closed])

问题

我需要将 6000 多个 csv 文件整理成一个 csv 文档。 当前的 VBA 流程是: 1. 打开单个 CSV 数据文件 2. 根据行数将文件内容加载到数组 3. 关闭单个 CSV 文件 4. 处理数组

为了提高代码和处理的效率,我希望有一种方法可以将单个 CSV 文件中的数据加载到数组中,而无需打开和关闭每个文件。

我使用的是 Excel 2011 for Mac。

回答1

好的,我假设所有 6000 个文件都具有相同的格式。

我的测试条件

  1. 我有一个名为 C:\Temp\ 的文件夹,其中包含 6000 个 CSV 文件
  2. 所有 csv 文件都有 40 行和 16 列
  3. 在 Excel 2010 中对其进行了测试。无法访问 2011。将在 2011 年进行大约 30 分钟的测试。

我运行了下面的代码,代码只用了 4 秒。

Option Explicit

Sub Sample()
    Dim strFolder As String, strFile As String
    Dim MyData As String, strData() As String
    Dim FinalArray() As String
    Dim StartTime As String, endTime As String
    Dim n As Long, j As Long, i As Long

    strFolder = "C:\Temp\"

    strFile = Dir(strFolder & "*.csv")

    n = 0

    StartTime = Now

    Do While strFile <> ""
        Open strFolder & strFile For Binary As #1
        MyData = Space$(LOF(1))
        Get #1, , MyData
        Close #1

        strData() = Split(MyData, vbCrLf)
        ReDim Preserve FinalArray(j + UBound(strData) + 1)
        j = UBound(FinalArray)

        For i = LBound(strData) To UBound(strData)
            FinalArray(n) = strData(i)
            n = n + 1
        Next i

        strFile = Dir
    Loop

    endTime = Now

    Debug.Print "Process started at : " & StartTime
    Debug.Print "Process ended at : " & endTime
    Debug.Print UBound(FinalArray)
End Sub

文件夹截图

在此处输入图片说明

代码输出的屏幕截图

在此处输入图片说明


更新

好的,我在 MAC 上测试过了

我的测试条件

  1. 我在桌面上有一个名为 Sample 的文件夹,其中有 1024 个 CSV 文件
  2. 所有 csv 文件都有 40 行和 16 列
  3. 在 Excel 2011 中对其进行了测试。

我运行了下面的代码,代码用了不到 1 秒(因为只有 1024 个文件)。 所以我期待它再次运行 4 秒,以防有 6k 个文件

Sub Sample()
    Dim strFile As String
    Dim MyData As String, strData() As String
    Dim FinalArray() As String
    Dim StartTime As String, endTime As String
    Dim n As Long, j As Long, i As Long

    StartTime = Now

    MyDir = ActiveWorkbook.Path
    strPath = MyDir & ":"

    strFile = Dir(strPath, MacID("TEXT"))

    'Loop through each file in the folder
    Do While Len(strFile) > 0
        If Right(strFile, 3) = "csv" Then
            Open strFile For Binary As #1
            MyData = Space$(LOF(1))
            Get #1, , MyData
            Close #1

            strData() = Split(MyData, vbCrLf)
            ReDim Preserve FinalArray(j + UBound(strData) + 1)
            j = UBound(FinalArray)

            For i = LBound(strData) To UBound(strData)
                FinalArray(n) = strData(i)
                n = n + 1
            Next i

            strFile = Dir
        End If
        strFile = Dir
    Loop

    endTime = Now

    Debug.Print "Process started at : " & StartTime
    Debug.Print "Process ended at : " & endTime
    Debug.Print UBound(FinalArray)
End Sub

文件夹截图

在此处输入图片说明

代码输出的屏幕截图

在此处输入图片说明

回答2

不需要使用 Excel 来执行此操作,您可以通过从命令提示符输入以下命令使用 windows copy 进行合并:

copy *.csv mergedfilename.csv
回答3

在我看来,您的问题没有 Excel 答案 - 无论如何,当然不在其正常定义范围内。

解决它的正确方法是使用适合该任务的编程语言; perl,例如,甚至命令 shell,来组合文件。 Excel 不是为常量文件 i/o 设计的,但 perl 非常擅长处理大量文件。 我在一个相对较小的 unix 服务器上在几分钟内执行了一个与此类似的项目(组合了数百万个文件)。

您还可以使用命令 shell 将文件放在一起 (cat=concatenate),正如 nneonneo 在评论中所建议的那样; 我不能说哪个更快。 Perl 肯定需要更长的时间来编写代码,尤其是如果您必须先学习 perl(尽管网上有很多示例)。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Python:我可以写入文件而不将其内容加载到 RAM 中吗?(Python: Can I write to a file without loading its contents in RAM?)
    问题 有一个我想洗牌的大数据集。 整个集合无法放入 RAM 中,因此如果我可以同时打开多个文件(例如 hdf5、numpy),按时间顺序循环遍历我的数据并将每个数据点随机分配给其中一个堆(然后将每个文件打乱),那就太好了桩)。 我对在 python 中处理数据真的很缺乏经验,所以我不确定是否可以在不将其余内容保存在 RAM 中的情况下写入文件(一直使用 np.save 和 savez 但收效甚微)。 这是可能的,在 h5py 或 numpy 中,如果是这样,我该怎么做? 回答1 内存映射文件将满足您的需求。 他们创建了一个 numpy 数组,将数据留在磁盘上,仅根据需要加载数据。 完整的手册页在这里。 然而,使用它们的最简单的方法就是通过传递参数mmap_mode=r+或mmap_mode=w+在调用np.load叶文件在磁盘上(见这里)。 我建议使用高级索引。 如果一维数组arr有数据,则可以使用列表对其进行索引。 所以arr[ [0,3,5]]会给你的第0,第3和第5元素arr 。 这将使选择混洗版本变得更加容易。 由于这将覆盖数据,因此您需要以只读方式打开磁盘上的文件,并创建副本(使用mmap_mode=w+ )以放入混洗数据。
  • 为什么保存到名为 temp 的文件夹会导致数据加载在 Matlab 的 for 循环中变慢?(Why would saving to a folder called temp cause data loading to slow down in a for loop in Matlab?)
    问题 重要更新 我刚刚发现在重新启动 Matlab 和计算机后,这个简化的代码也不再为我重现问题......我很抱歉占用你的时间使用一个不起作用的脚本。 但是,如果我在内部“for”循环中的任何文件夹(我已经尝试过)中保存任何内容,那么旧问题仍然存在于我的原始脚本中。 为了我的目的,我已经解决了这个问题,除非我绝对需要它,否则根本不进行保存。 原始脚本在for循环和使用save或load方面具有以下结构: load() % .mat files, size 365x92x240 for day = 1:365 load() % .mat files, size 8x92x240 for type = 1:17 load() % .mat files size 17x92x240 load() % .mat files size 92x240 for step 1:8 %only calculations end save() % .mat files size 8x92x240 end save() % .mat files, size 8x92x240 end % the load and saves outside the are in for loops too, but do not seem to affect the described behavior in the
  • 阻止Excel自动将某些文本值转换为日期(Stop Excel from automatically converting certain text values to dates)
    问题 有没有人碰巧知道是否可以为某个字段添加到我的csv中的令牌,因此Excel不会尝试将其转换为日期? 我正在尝试从应用程序中写入.csv文件,并且其中一个值恰好看起来像日期,Excel会自动将其从文本转换为日期。 我尝试将所有文​​本字段(包括看起来像日期的文本字段)放在双引号中,但这无效。 回答1 我发现,在双引号前放置'='可以完成您想要的操作。 它将数据强制为文本。 例如。 =“ 2008-10-03”,=“更多文字” 编辑(根据其他帖子) :由于Jeffiekins指出了Excel 2007错误,因此应使用安德鲁提出的解决方案: "=""2008-10-03""" 回答2 我知道这是一个老问题,但是问题不会很快消失。 CSV文件很容易从大多数编程语言中生成,相当小,使用纯文本编辑器即可被人阅读,并且无处不在。 问题不仅在于文本字段中的日期,而且任何数字也将从文本转换为数字。 有两个问题的示例: 邮政编码电话号码政府身份证号码 有时可以以一个或多个零(0)开头,这些零在转换为数字时会被丢弃。 或者该值包含可以与数学运算符混淆的字符(如日期:/,-)。 我可以想到两种情况,如前所述,“ prepending =”解决方案可能不理想 该文件可能会导入到MS Excel以外的程序中(想到了MS Word的邮件合并功能), 易读性可能很重要的地方。 我的解决方法 如果在值的前面
  • 使用UTF8编码的Excel转换为CSV [关闭](Excel to CSV with UTF8 encoding [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 去年关闭。 改善这个问题 我有一个包含一些西班牙语字符(波浪号等)的Excel文件,我需要将其转换为CSV文件以用作导入文件。 但是,当我执行“另存为CSV”时,它会处理不是ASCII字符的“特殊”西班牙字符。 这似乎也用左引号和右引号以及长破折号来完成,这些引号似乎来自在Mac中创建Excel文件的原始用户。 由于CSV只是一个文本文件,因此我确定它可以处理UTF8编码,因此我猜测它是Excel的局限性,但是我正在寻找一种方法,以将Excel转换为CSV并保留非ASCII字符完好无损的。 回答1 一个简单的解决方法是使用Google Spreadsheet。 粘贴(仅当您具有复杂的公式时才有值)或导入工作表,然后下载CSV。 我只是尝试了几个字符,但效果很好。 注意:导入时,Google表格确实有限制。 看这里。 注意:请小心使用Google表格的敏感数据。 编辑:另一种选择-基本上,他们使用VB宏或插件来强制将其另存为UTF8。 我没有尝试过这些解决方案中的任何一种,但听起来很合理。 回答2 我发现OpenOffice的电子表格应用程序Calc非常擅长处理CSV数据。 在“另存为...”对话框中,单击“格式选项”以获取CSV的不同编码。
  • 在打开的文件上使用 Pandas read_csv() 两次(Using Pandas read_csv() on an open file twice)
    问题 当我尝试使用 pandas 时,我注意到 pandas.read_csv 的一些奇怪行为,并想知道是否有更多经验的人可以解释可能导致它的原因。 首先,这是我用于从 .csv 文件创建新 pandas.dataframe 的基本类定义: import pandas as pd class dataMatrix: def __init__(self, filepath): self.path = filepath # File path to the target .csv file. self.csvfile = open(filepath) # Open file. self.csvdataframe = pd.read_csv(self.csvfile) 现在,这很有效,并且在我的 __ main __.py 中调用该类成功创建了一个 Pandas 数据帧: From dataMatrix.py import dataMatrix testObject = dataMatrix('/path/to/csv/file') 但我注意到这个过程会自动将 .csv 的第一行设置为 pandas.dataframe.columns 索引。 相反,我决定对列进行编号。 由于我不想假设我事先知道列数,因此我采用了打开文件,将其加载到数据帧中,计算列数,然后使用范围
  • 在 iPhone 上的 Objective-C 中将大文件读入 sqlite 表(Read large file into sqlite table in objective-C on iPhone)
    问题 我有一个 2 MB 的文件,不太大,我想把它放到一个 sqlite 数据库中,以便我可以搜索它。 大约有 3 万个 CSV 格式的条目,每行有六个字段。 我的理解是 iPhone 上的 sqlite 可以处理这种大小的数据库。 我采取了一些方法,但它们都慢了 > 30 秒。 我试过了: 1)使用C代码读取文件并将字段解析为数组。 2)使用如下Objective-C代码解析文件,直接放入sqlite数据库: NSString *file_text = [NSString stringWithContentsOfFile: filePath usedEncoding: NULL error: NULL]; NSArray *lineArray = [file_text componentsSeparatedByString:@"\n"]; for(int k = 0; k < [lineArray count]; k++){ NSArray *parts = [[lineArray objectAtIndex:k] componentsSeparatedByString: @","]; NSString *field0 = [parts objectAtIndex:0]; NSString *field2 = [parts objectAtIndex:2]; NSString
  • 保存和加载 data.frames [重复](Saving and loading data.frames [duplicate])
    问题 这个问题在这里已经有了答案: R 数据文件之间的主要区别是什么? (2 个回答) 2年前关闭。 我根据以下形式的一组推特制作了一个数据框: rdmTweets <- userTimeline("rdatamining", n=200) df <- do.call("rbind", lapply(rdmTweets, as.data.frame)) 现在我以这种方式使用 save 保存数据框: save(df, file="data") 我如何加载保存的数据框以备将来使用? 当我使用: df2 <- load("data") 并且我应用dim(df2)它应该返回数据框具有的推文数量,但它只显示 1。 回答1 正如@mrdwab 指出的那样, save保存名称以及数据/结构(实际上可以在单个文件中保存许多不同的 R 对象)。 还有另一对存储功能的行为更符合您的预期。 尝试这个: saveRDS(df, file="mytweets.rds") df2 <- readRDS("mytweets.rds") 这些函数一次只能处理一个对象。 回答2 另一种选择是将您的数据框保存为 csv 文件。 此选项的好处是它提供了长期存储,即您将(可能)能够在十年内在任何平台上打开您的 csv 文件。 使用RData文件,您只能使用 R 打开它,我不想在版本之间打开它。 要将文件另存为 csv
  • 快速将XML转换为Excel [关闭](Quick convert XML to Excel [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 1年前关闭。 改善这个问题 将XML中的112,000行转换为Excel视图的最快方法(以最少的努力,而不是超级性能)。 回答1 如果您使用的是Excel 2007,并且想使用XSLT,那么最好的选择就是使用EXPath Zip Module功能来修改现有的Excel .xslx文件。 但是,我的首选选择是使用一个小的Excel VBA宏。 我在下面提供了一个名为“ load”的VBA过程的示例代码-此示例使用XML DOM,因此XML的所有112K行都将首先加载到内存中,但是如果性能不成问题,则它比SAX更简单选择。 您将需要修改xpathToExtractRow以适合您的XML输入结构。 还假设XML行元素的直接子节点包含要导入为文本节点的单元格数据,如果没有,则需要使用SelectNode调用来获取所需的数据。 作为DOMDocument60的私有dom 公共子负载() Dim nodeList As IXMLDOMNodeList Dim nodeRow As IXMLDOMNode Dim nodeCell As IXMLDOMNode Dim rowCount As Integer Dim cellCount As Integer
  • 如何将PHP文件加载到变量中?(How do I load a PHP file into a variable?)
    问题 我需要将一个PHP文件加载到一个变量中。 像include(); 我已经加载了一个简单的HTML文件,如下所示: $Vdata = file_get_contents("textfile.txt"); 但是现在我需要加载一个PHP文件。 回答1 我想您想获取PHP生成的内容,如果使用,请使用: $Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php'); 否则,如果您想获取PHP文件的源代码,则它与.txt文件相同: $Vdata = file_get_contents('path/to/YOUR/FILE.php'); 回答2 ob_start(); include "yourfile.php"; $myvar = ob_get_clean(); ob_get_clean() 回答3 如果使用eyze建议的http:// ,则只能读取PHP脚本的输出。 如果PHP脚本本身与正在运行的脚本位于同一服务器上,则只能读取它。 然后,您可以使用类似 $Vdata = file_get_contents('/path/to/your/file.php"); 回答4 如果您的文件具有如下的return语句: <?php return array( 'AF' => 'Afeganistão', 'ZA' => 'África
  • SSIS 包全表加载缓慢(SSIS Package Full Table Load Slow)
    问题 我们有一个 SSIS 包,显然被开发团队称为“慢”。 由于他们没有使用 SSIS ETL 的人,因此作为 DBA,我尝试深入研究。 以下是我找到的信息:SQL Server 2014 版本已升级到 2017,因此它具有两个版本的 SSIS。 他们将大小为 200 GB 的 SQL Server 表加载到 SSIS 中,然后使用命令行压缩功能将数据压缩到平面文件中。 数据流任务简单地点击select * from view - 该视图只是包含没有其他花哨连接的表。 在进行故障排除时,我发现在 SQL Server 上几乎没有任何负载,这可能是因为 select 命令在单线程中运行而不使用 SQL Server 内核。 当我运行相同的 select * 命令(仅 5 秒,因为它是 200 GB 表)时,即使我的命令也是单线程的。 该包具有 SQL 作业显示的配置文件(这是包的运行方式)以及一些连接设置。 在 BIDS 中打开包显示 defaultBufferMaxRows 仅为 10000(可能是默认值)(因为配置文件或任何变量没有客户值,我猜这也是包正在使用的)。 SQL 和 SSIS 都在同一台服务器上。 SQL 已分配最大内存,为 SSIS 和 OS 留下大约 100 GB。 请分享有关如何强制 SQL Server 使用多个线程运行此选择命令以便整个表更快地进入 SSIS
  • 将 jar 文件中的类从 url 加载到内存中,然后从所有类中运行主类(Load classes from a jar file from a url to memory and then run the main class out of all the classes)
    问题 我正在尝试将来自 URL 的 jar 文件中的类加载到内存中,然后运行加载的类之一。 我不希望用户可以访问类文件或 jar。 我看过几个类似的问题,但没有得到答复。 我知道它可能会使用 URLClassLoader 和 ByteArrayInputStream/ByteArrayOutputStream。 在此先感谢您的帮助。 类似的未回答问题: 如何从 URL 加载 jar 而不下载它? 从 URL 加载 jar 回答1 你走在正确的轨道上(我认为)。 步骤是: 使用 URLConnection 打开 JAR 文件的流。 读取流并将其写入 ByteArrayOutputStream,并提取字节数组。 在字节数组上打开一个 ByteArrayInputStream,然后将它包装在一个 JarInputStream 中。 遍历 JAR 文件条目的成员,保存条目信息并将条目文件内容缓存在内存中。 编写一个自定义类加载器,它使用 JAR 文件条目和内容的内存缓存。 我无法指出示例代码,因为我找不到任何示例代码。 (您几乎必须在内存中缓存内容,因为JarFile API 需要一个RandomAccessFile ,这意味着数据在文件系统中。在某些系统上,您可以创建一个临时文件,在其上打开一个 RAF,取消链接,然后然后获取 URL 并将其写入 RAF。但这不是可移植的......)
  • 有没有一种内存高效且快速的方法来在python中加载大json文件?(Is there a memory efficient and fast way to load big json files in python?)
    问题 我有一些500MB的json文件。 如果我使用“平凡”的json.load一次加载所有内容,它将消耗大量内存。 有没有办法部分读取文件? 如果它是文本行分隔文件,则可以在行上进行迭代。 我正在寻找一个比喻。 有什么建议? 谢谢 回答1 更新 请参阅其他答案以获取建议。 2010年的原始答案,现在已经过时 简短的回答:不。 正确分割json文件将需要对json对象图有深入的了解。 但是,如果您具有这些知识,则可以实现一个类似文件的对象,该对象包装json文件并吐出适当的块。 例如,如果您知道json文件是单个对象数组,则可以创建一个包装json文件并返回数组块的生成器。 您将必须进行一些字符串内容解析,以正确获取json文件的分块。 我不知道是什么产生了您的json内容。 如果可能的话,我会考虑生成多个可管理文件,而不是一个大文件。 回答2 这个问题有一个重复的答案更好。 请参阅https://stackoverflow.com/a/10382359/1623645,其中建议使用ijson。 更新: 我尝试了一下,而ijson是JSON,而SAX是XML。 例如,您可以执行以下操作: import ijson for prefix, the_type, value in ijson.parse(open(json_file_name)): print prefix, the
  • 如何正确保存和加载numpy.array()数据?(How to save and load numpy.array() data properly?)
    问题 我想知道如何正确保存和加载numpy.array数据。 目前,我正在使用numpy.savetxt()方法。 例如,如果我有一个数组markers ,它看起来像这样: 我尝试通过使用以下方式保存它: numpy.savetxt('markers.txt', markers) 在其他脚本中,我尝试打开以前保存的文件: markers = np.fromfile("markers.txt") 这就是我得到的... 首先保存的数据如下所示: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 但是当我使用相同的方法保存刚刚加载的数据时,即 numpy.savetxt()看起来像这样: 1.398043286095131769e-76 1.398043286095288860e-76 1.396426376485745879e-76 1
  • Python_文件IO_CSV文件_文件交互_OS模块_异常(13)
    目录: 一、文件介绍 二、文件读写简单操作 三、文件权限 四、文件操作 1、读操作 2、写操作 3、CSV文件读写 4、with 5、文件交互扩展 6、文件复制 五、os模块 六、异常 1、什么是异常 2、常见内建异常 七、异常捕获 1、基本语法 2、异常处理 八、异常触发 创作不易,各位看官,点个赞收藏、关注必回关、QAQ、您的点赞是我更新的最大动力! 一、文件介绍 计算机中的所有的数据都是文件。 广义上说文件是按照文件的类型进行分类:如视频文件、音频文件、图片文件、文档文件等 等各种形式的文件,在这样的分类情况下~很明确使用对应的软件打开对应的文件。 视频文件:视频播放器 音频文件:网易云音乐… 图片文件:画图、照片… 文档文件:word 文档,记事本,wps 软件 表格文件:excel,wps 表格软件 狭义上的文件是按照组成文件的数据格式分类: 文本文件、二进制文件 文本文件:数据是按照字符组成的文件,使用记事本可以正常打开 文本文档,各种编程语言源代码… 二进制文件:数据是按照字节组成的文件,使用记事本打开会出现乱码 图片文件、音频文件、视频文件、word 文档 返回文章目录 二、文件读写简单操作 文件操作,打开, 读写 ,关闭。 打开: open(文件路径,操作权限[默认为r],编码方式) 关闭: 文件名.close() 读、文件名.read: 打开一个不存在的文件
  • 如何使用 Swift 将文本文件逐行加载到数组中?(How do I load a text file line by line into an array with Swift?)
    问题 如何使用swift将文本文件逐行加载到array ? 回答1 类似的东西: func arrayFromContentsOfFileWithName(fileName: String) -> [String]? { guard let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "txt") else { return nil } do { let content = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding) return content.componentsSeparatedByString("\n") } catch _ as NSError { return nil } } 这种方法假设有问题的文件位于您的应用程序包中。 回答2 使用 Swift 5,您可以根据需要,选择以下 3 种方式之一来解决您的问题。 #1. 使用StringProtocol的components(separatedBy:)方法 Foundation为String提供了一个名为 components(separatedBy:) 的方法,声明如下: func components(separatedBy separator
  • 将大型 Twitter JSON 数据 (7GB+) 加载到 Python 中(Loading Large Twitter JSON Data (7GB+) into Python)
    问题 我已经通过 AWS 设置了一个公共流来收集推文,现在想做一些初步分析。 我的所有数据都存储在 S3 存储桶中(以 5mb 文件的形式)。 我下载了所有内容并将所有文件合并为一个。 根据 Twitter 规范,每条推文都存储为标准 JSON 对象。 基本上,合并文件包含多个 JSON 对象。 我添加了开始和结束方括号 ( [] ) 以使其看起来像一个字典列表,以便在它被读入 Python 时。 所以结构有点像这样(我不确定我是否可以在这里发布 Twitter 数据): [{"created_at":"Mon Sep 19 23:58:50 +000 2016", "id":<num>, "id_str":"<num>","text":"<tweet message>", etc.}, {same as above}, {same as above}] 删除第一条推文后,我将所有内容放入 www.jsonlint.com 并确认它是有效的 JSON 数据结构。 现在,我正在尝试将这些数据加载到 Python 中,并希望对推文中的不同术语进行一些基本计数(例如,@HillaryClinton 在推文文本中提到了多少次,等等)。 以前使用较小的数据集,我能够摆脱这样的代码: import json import csv import io data_json = open(
  • 如何从字节数组加载Word文档(How to load Word document from byte array)
    问题 我将整个MS Word文件本身保存到一个字节数组中.A希望像在文件系统上那样加载它,但要尽量少使用Microsoft.Office.Interop.Word,因为获取时它非常慢.Open(args[])部分。 回答1 试试这个.... byte[] bte = File.ReadAllBytes("E:\\test.doc"); // Put the Reading file File.WriteAllBytes(@"E:\\test1.doc", bte); // Same contents you will get in byte[] and that will be save here 回答2 由于没有支持字节数组的方法,因此没有使用Interop.Word即时支持的方法。 作为可行的解决方法,您可以通过以下方式使用临时文件: // byte[] fileBytes = getFileBytesFromDB(); var tmpFile = Path.GetTempFileName(); File.WriteAllBytes(tmpFile, fileBytes); Application app = new word.Application(); Document doc = app.Documents.Open(filePath); // .. do your
  • 如何在 RStudio 中打开项目时自动加载包(How to load packages automatically when opening a project in RStudio)
    问题 每次我重新启动 RStudio 时,它都要求我重新加载之前在工作区中加载的所有包。 我似乎无法弄清楚问题是什么,RStudio 在关闭项目时正在保存项目。 当我打开项目时,如何确保 RStudio 重新加载必要的包? 回答1 我想您想说您必须重新加载之前在工作区中加载的所有包。 这不是错误,这是设计使然。 如果你想在项目启动时加载一些包,你可以通过在项目目录中创建一个名为.Rprofile的文件来.Rprofile ,并指定你希望 RStudio 在加载项目时运行的任何代码。 例如: cat("Welcome to this project.\n") require(ggplot2) require(zoo) 将在控制台中打印一条欢迎消息,并在每次打开项目时加载ggplot2和zoo 。 另见 http://www.rstudio.com/ide/docs/using/projects 回答2 通常,RStudio 中的默认包加载与 R 中的默认包加载没有什么不同(如何在 R 中自动加载包?)。 启动时,R 检查本地或失败的.Rprofile文件,即主目录或安装目录(在 Mac/Linux 上: ./.Rprofile或其他~/.Rprofile )并执行它,因此任何options(defaultPackages...))或它包含的其他与包加载相关的命令。
  • 将数据从 csv 加载到 Scikit 学习 SVM(load data from csv into Scikit learn SVM)
    问题 我想训练一个 SVM 来执行样本分类。 我有一个 csv 文件,它有 3 列带标题:特征 1、特征 2、类标签和 20 行(= 样本数)。 现在我引用 Scikit-Learn 文档“作为其他分类器,SVC、NuSVC 和 LinearSVC 将两个数组作为输入:一个大小为 [n_samples, n_features] 的数组 X 包含训练样本,以及一个包含类标签(字符串或整数),大小 [n_samples]:" 我知道我需要获得两个数组(一个二维数组和一个一维数组)才能将数据输入到 SVM 中。 但是我无法理解如何从 csv 文件中获取所需的数组。 我试过下面的代码 import numpy as np data = np.loadtxt('test.csv', delimiter=',') print data 但是它显示错误“ValueError:无法将字符串转换为浮点数: ࡱ ” csv 中没有列标题。 我在调用函数 np.loadtxt 时犯了什么错误还是应该使用其他东西? 更新:这是我的 .csv 文件的样子。 12 122 34 12234 54 23 23 34 23 回答1 您传递了 param delimiter=','但您的 csv 不是逗号分隔的。 所以以下工作: In [378]: data = np.loadtxt(path_to_data)
  • 将 Python 字典列表附加到文件而不加载它(Append list of Python dictionaries to a file without loading it)
    问题 假设我需要一个包含字典列表的数据库文件: 文件: [ {"name":"Joe","data":[1,2,3,4,5]}, { ... }, ... ] 我需要一个函数来接收如上所示的字典列表并将其附加到文件中。 有没有办法实现这一点,比如使用 json (或任何其他方法),而不加载文件? EDIT1:注意:我需要的是将新词典附加到光盘上现有的文件中。 回答1 您可以使用 json 转储字典,每行一个。 现在每一行都是您编写的单个 json dict。 您丢失了外部列表,但您可以通过简单的追加到现有文件来添加记录。 import json import os def append_record(record): with open('my_file', 'a') as f: json.dump(record, f) f.write(os.linesep) # demonstrate a program writing multiple records for i in range(10): my_dict = {'number':i} append_record(my_dict) 该列表可以稍后组装 with open('my_file') as f: my_list = [json.loads(line) for line in f] 该文件看起来像 {"number"